hdu 1233 kruskal + 并查集
2017-11-10 23:44
453 查看
//构建的图为无向图 #include <iostream> #include<cstdio> #include<algorithm> using namespace std; const int maxe=5000+5; //最大边数 const int maxv=100+5; //最大顶点数 int n; //n为最小生成树中的顶点 struct Edge{ int from,to; int weight; }; bool operator<(const Edge&E1,const Edge&E2) { return E1.weight<E2.weight; } Edge edges[maxe]; int vset[maxv]; int e; //构成最小生成树所需要的边数 int Getparent(int i) { if(i!=vset[i]) vset[i]=Getparent(vset[i]); return vset[i]; } void kruskal(int num) //从num条路径中选取e条路径完成生成树 { int sum=0; for(int j=1;j<=num;j++) { int p1=Getparent(edges[j].from); int p2=Getparent(edges[j].to); if(p1!=p2) { sum+=edges[j].weight; vset[p2]=p1; e--; } } cout<<sum<<endl; } int main() { while(scanf("%d",&n)==1&&n) { e=n-1; for(int i=1;i<=n;i++) //使用并查集 vset[i]=i; int num=(n*(n-1))/2; for(int i=1;i<=num;i++) { int v1,v2,dist; scanf("%d%d%d",&v1,&v2,&dist); edges[i].from=v1; edges[i].to=v2; edges[i].weight=dist; } sort(edges,edges+num+1); kruskal(num); } return 0; }
相关文章推荐
- HDU 1233 还是畅通工程 并查集 (单向点连通)
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
- hdu 1233 还是畅通工程(并查集)
- HDU 1233 还是畅通工程 最小生成树Kruskal算法/并查集
- HDU 1233还是畅通工程——克鲁斯卡尔算法(带并查集)
- hdu 1233(还是畅通project)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)
- HDU 1233 还是畅通工程 并查集 (单向点连通)
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
- HDU 1233.还是畅通工程【最小生成树 kruskal算法(并查集)+prim算法】【1月8】
- HDU 1233 贪心+并查集
- HDU 1233 还是畅通工程 并查集 (单向点连通)
- hdu 1233(还是畅通工程)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)
- HDU--1233:还是畅通工程 (并查集 & 最小生成树Prim)
- HDU 1233 还是畅通工程(并查集)
- HDU--1233 -- 还是畅通工程 [kruskal算法] [prime算法] [并查集]
- 克鲁斯卡尔(并查集)hdu 1233
- HDU--1233--还是畅通工程--并查集
- HDU 1233 贪心+并查集
- 【最小生成树】+【并查集】-HDU-1233-还是畅通工程
- HDU 1863 畅通工程(Kruskal + 并查集)