qwq
跑最小生成树
一共n个电话,所以相当于最小生成树里删去最大的n-1的边
所以答案即为最小生成树的第n大边
prim或者kruskal都行
这是prim
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 int x[505], y[505]; 7 int p, n, now, cnt; 8 double ans[505], dis[505][505], d[505]; 9 bool used[505]; 10 bool cmp(double a,double b){ 11 return a>b; 12 } 13 int main(){ 14 scanf("%d%d",&p,&n); 15 for(int i=1; i<=n; i++){ 16 scanf("%d%d",&x[i],&y[i]); 17 d[i]=0x3f3f3f3f; 18 } 19 for(int i=1; i<=n; i++){ 20 for(int j=1; j<i; j++){ 21 double a=x[i]-x[j]; 22 double b=y[i]-y[j]; 23 a*=a; 24 b*=b; 25 dis[i][j]=sqrt(a+b); 26 dis[j][i]=dis[i][j]; 27 } 28 } 29 d[1]=0; 30 for(int i=1; i<=n; i++){ 31 double minn=0x3f3f3f3f3f; 32 for(int j=1; j<=n; j++){ 33 if(minn>d[j] && !used[j]){ 34 minn=d[j]; 35 now=j; 36 } 37 } 38 used[now]=true; 39 ans[++cnt]=minn; 40 for(int j=1; j<=n; j++){ 41 if(!used[j]){ 42 d[j]=min(d[j], dis[now][j]); 43 } 44 } 45 } 46 sort(ans+1, ans+n+1, cmp);//按照从大到小排序 47 printf("%.2lf", ans[p]); 48 return 0; 49 }
这是kruskal,来自于pushinl
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #define N 501 7 using namespace std; 8 int f[N], px[N], py[N]; 9 double ans[N]; 10 int n, k, num, cnt; 11 struct data{ 12 int x, y; 13 double d; 14 }b[N*N]; 15 double dis(int ax, int ay, int bx, int by){ 16 return sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by)); 17 } 18 int find(int x){ 19 if(f[x]!=x)f[x]=find(f[x]); 20 return f[x]; 21 } 22 inline bool cmp(const data&a, const data&b){ 23 return a.d<b.d; 24 } 25 int main(){ 26 scanf("%d%d", &k, &n); 27 for(int i=1; i<=n; i++) 28 scanf("%d%d", &px[i], &py[i]); 29 for(int i=1; i<=n; i++) 30 for(int j=i+1; j<=n; j++) 31 b[++num]=(data){i, j, dis(px[i], py[i], px[j], py[j])}; 32 sort(b+1, b+num+1, cmp); 33 for(int i=1; i<=n; i++) 34 f[i]=i; 35 for(int i=1; i<=num; i++){ 36 int x=find(b[i].x); 37 int y=find(b[i].y); 38 if(x!=y){ 39 f[y]=x; 40 ans[++cnt]=b[i].d; 41 } 42 if(cnt==n-1)break;//枚举到n-1或者n-k也行 43 } 44 printf("%.2f", ans[n-k]);注意是n-k,因为这里并没有重新排序, 45 return 0; 46 }
话说luogu数据真的是十分水了orzzz