poj2349 Kruskal题解
2017-08-13 10:47
232 查看
Kruskal:Arctic Network 题目大概意思就是给你n个点的坐标,有几个点不用花钱,求最小生成树(不用花钱的)费用. #include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> using namespace std; int x[1001],y[1001],dep; struct Dis { int val,from,to; }; Dis dis[2000001]; int father[1001],s[1001]; int find(int x) { if(father[x]!=x) return find(father[x]); return x; } void update(int a,int b) { dep--; int fa=find(a); int fb=find(b); if(s[fa]>s[fb]) father[fb]=fa,s[fa]+=s[fb]; else father[fa]=fb,s[fb]+=s[fa]; } bool cmp(const Dis &a,const Dis &b) { return a.val<b.val; } int main() { int n,k,i,j,q,l; scanf("%d",&q); for(l=1;l<=q;l++) { int idx=0; scanf("%d%d",&k,&n); dep=n; for(i=1;i<=n;i++) s[i]=1,father[i]=i; for(i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); for(i=1;i<=n;i++) for(j=1;j<i;j++) { dis[++idx].val=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]); dis[idx].from=i; dis[idx c464 ].to=j; } sort(dis+1,dis+idx+1,cmp); for(i=1;i<=idx;i++) { if(find(dis[i].from)==find(dis[i].to)) continue; update(dis[i].from,dis[i].to); if(dep==k) { printf("%.2lf\n",sqrt(double(dis[i].val))); break; } } } }
相关文章推荐
- POJ 2349 Arctic Network 最小生成树题解
- poj 2349(Prime + Kruskal 最小生成树)
- poj_2349 Kruskal 最小生成树
- poj 2349 Arctic Network 【最小生成树-Kruskal】
- zoj 1914 || poj 2349 Arctic Network【最小生成树 kruskal && prim】
- POJ2349 Arctic Network(最小生成树,Kruskal)
- POJ 2349 Arctic Network(Kruskal求最小生成树第k条边的长度)
- [Kruskal] POJ 2349
- POJ2349—最小生成树的Kruskal和Prim实现
- POJ 2349 ——Arctic Network(kruskal)
- Arctic Network POJ - 2349 (最小生成树Kruskal)
- POJ 2349 Arctic Network (Kruskal) .
- [POJ 2349] Arctic Network Kruskal
- POJ2349 Arctic Network Prim+堆(优先队列)、Kruskal(并查集)
- POJ 2349 Arctic Network+Kruskal最小生成树
- poj 2349 kruskal最短路
- poj2349-kruskal
- POJ 2349 Arctic Network(Prim/Kruskal)
- POJ 2349(Kruskal) Arctic Network
- POJ_2349(kruskal)