hdu 1301 Jungle Roads

来源:互联网 发布:ios 检测网络好不好 编辑:程序博客网 时间:2024/05/29 02:15

kruskal模板题,就是有几个坑点


#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<iostream>using namespace std;struct node{int u,v;int w;}e[100];int n,m,father[100];int cmp(node a,node b){return a.w<b.w;}int findroot(int p){if(father[p]!=p)father[p]=findroot(father[p]);return father[p];}void unionset(int p,int q){father[q]=p;}int kruskal(){int res=0;int j=0,k=1;for(int i=0;i<=m;i++)father[i]=i;//由于下面城镇是从0开始标号,所以这里初始化要从0开始,wa了很久才找到这个bug while(k<n&&j<m){int m1=e[j].u,m2=e[j].v;int sn1=findroot(m1),sn2=findroot(m2);if(sn1!=sn2){res+=e[j].w;k++;unionset(sn1,sn2);}j++;}if(k!=n)res=-1;return res;}int main(){while(scanf("%d",&n)!=EOF){if(!n)break;m=0;int i,j;for(i=0;i<n-1;i++){char c;int num;getchar(); //一定要加这句话,不然无法输出答案 scanf("%c %d",&c,&num);for(j=0;j<num;j++){char ch;int w;getchar();//这里也是 scanf("%c %d",&ch,&w);e[m].u=c-'A';e[m].v=ch-'A';e[m].w=w;m++;}}sort(e,e+m,cmp);int ans=kruskal();printf("%d\n",ans);}return 0;}


原创粉丝点击