紫云网站建设,阿里云 做网站 百度开放云,泗水网站建设ys178,网站怎么做才正题
题目链接:https://jzoj.net/senior/#main/show/1405 题目大意
两个平行于xxx轴的线上有若干个点#xff0c;求连接所有点需要多少距离的线。 解题思路
在同一平行线上的相邻的连边#xff0c;然后在不同的上面的话就离最近的两个#xff0c;跑最小生成树即可。 code…正题
题目链接:https://jzoj.net/senior/#main/show/1405 题目大意
两个平行于xxx轴的线上有若干个点求连接所有点需要多少距离的线。 解题思路
在同一平行线上的相邻的连边然后在不同的上面的话就离最近的两个跑最小生成树即可。 codecodecode
#includecstdio
#includecstring
#includealgorithm
#includecctype
#includecmath
#define sqr(x) (1ll*(x)*(x))
using namespace std;
const int N601000*2;
struct node{int x,y;long long w;
}a[N*2];
int n,m,x1,x2,fa[N],y[N],tot;
double ans;
int read() {int x0,f1; char cgetchar();while(!isdigit(c)) {if(c-)f-f;cgetchar();}while(isdigit(c)) x(x1)(x3)c-48,cgetchar();return x*f;
}
bool cmp(node x,node y)
{return x.wy.w;}
int find(int x)
{return (fa[x]x)?x:(fa[x]find(fa[x]));}
int main()
{nread();mread();x1read();x2read();for(int i1;in;i)fa[i]i,y[i]y[i-1]read();for(int in1;inm;i)fa[i]i,y[i]y[i-1]*(i!n1)read();for(int i1;in;i)a[tot](node){i,i1,sqr(y[i1]-y[i])};for(int in1;inm;i)a[tot](node){i,i1,sqr(y[i1]-y[i])};int ln1;for(int i1;in;i){while(lnmy[l]y[i]) l;a[tot](node){i,l,1ll*sqr(y[i]-y[l])1ll*sqr(x1-x2)};if(ln1) a[tot](node){i,l-1,1ll*sqr(y[i]-y[l-1])1ll*sqr(x1-x2)}; }sort(a1,a1tot,cmp);int znm-1;for(int i1;itot;i){int Fafind(a[i].x),Fbfind(a[i].y);if(FaFb) continue;anssqrt(1.0*a[i].w);z--;fa[Fa]Fb;if(!z) break;}printf(%.2lf,ans);
}