/* * poj1251-- Kruskal * date 2014/7/15 * state AC */ #include <iostream> #include <algorithm> #include <fstream> #include <cstdio> #include <cstring> using namespace std; int const MAXN=30+100; int u[MAXN]; int v[MAXN]; int w[MAXN+50]; int p[MAXN]; int r[MAXN]; int cmp(const int i,const int j) { return w[i]<w[j]; } int unionFindSet(int x) { return p[x]==x?x:p[x]=unionFindSet(p[x]); } int Kruskal(int n,int m) { int ans=0; //memset(p,0,sizeof(p)); //memset(r,0,sizeof(r)); for(int i=0;i<n;i++) p[i]=i; for(int i=0;i<m;i++) r[i]=i; //mem sort(r,r+m,cmp); for(int i=0;i<m;i++) { int e=r[i]; int x=unionFindSet(u[e]); int y=unionFindSet(v[e]); if(x!=y) { ans+=w[e]; p[x]=y; } } return ans; } int main() { //cout << "Hello world!" << endl; //freopen("input.txt","r",stdin); char a[2],b[2]; int c; int m; int n; int edgeNum; while(scanf("%d",&n)) { if(n==0)break; memset(u,0,sizeof(u)); memset(v,0,sizeof(v)); memset(w,0,sizeof(w)); edgeNum=0; for(int i=0;i<n-1;i++) { scanf("%s%d",a,&m); for(int j=0;j<m;j++) { scanf("%s%d",b,&c); u[edgeNum]=a[0]-'A'; v[edgeNum]=b[0]-'A'; w[edgeNum]=c; edgeNum++; } } // /*cout<<"edgeNumber: "<<edgeNum<<endl; for(int k=0;k<edgeNum;k++) cout<<u[k]<<" "<<v[k]<<" "<<w[k]<<" "; cout<<"---"<<endl; */ cout<<Kruskal(n,edgeNum)<<endl; } return 0; }
poj1251--Kruskal
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
POJ-1251(Jungle Roads) Kruskal
POJ-1251 MST
kruskal #include ios 解题 -
poj1251 Jungle Roads
题目链接:http://poj.org/problem?id=1251 题意:看题面的图,求最小生成树 解析
#include i++ 最小生成树 -
POJ 3723 Conscription kruskal算法
图上的点。我们可以求出最大的减少的花费,用预定的花费(n+m) * 10000减去即可。求最大减少花费,首先把
kruskal poj #include i++ kruskal算法 -
POJ-1751(Hightways) Kruskal
POJ-1751 MST Kruskal
kruskal #include ios 编程题目 -
【POJ】[1251]Jungle Roads
知道是最小生成树 都懒得再一句一句翻译题目了...
i++ 数据 #include 数组 最小生成树 -
poj 2485 (kruskal算法)
/*kruskal算法*/#include //#include #include using namespace std;/*708K 922MS*/typedef struct _edge{ int x,y; int w;}edge;int n;int num;//fstream fin;void kruskal(edge *e,int len);int cmp(const void *a,const void *b);int main(){ //fin.open("2485.txt",ios::in); int t; cin>>t; w...
#include ios i++ kruskal算法 数值 题解 学习笔记 编程语言