kruskal模板

来源:互联网 发布:网络路径错误怎么办 编辑:程序博客网 时间:2024/04/30 16:53
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;struct node{int st,ed,len;}str[10000];int N;int per[1000];void init(){for(int i=1;i<=N;i++){per[i]=i;}}int cmp(node a,node b){return a.len<b.len;}int find(int x){return x==per[x]?x:(per[x]=find(per[x]));}int merge(int a,int b){int fx=find(a);int fy=find(b);if(fx!=fy){per[fx]=fy;return true;}return false;}int main(){int Q;int i,j;int m,n;int t;int d;int sum;int cnt;while(scanf("%d",&N)!=EOF){memt=0;init();cnt=0;sum=0;for(i=1;i<=N;i++){for(j=1;j<=N;j++){scanf("%d",&d);if(d!=0){str[t].st=i;str[t].ed=j;str[t].len=d;t++;}}}scanf("%d",&Q);for(i=1;i<=Q;i++){scanf("%d%d",&m,&n);if(merge(m,n))N--;}sort(str,str+t,cmp);for(i=0;i<t;i++){if(merge(str[i].st,str[i].ed)){cnt++;sum+=str[i].len;if(cnt==N-1){printf("%d\n",sum);break;}}}}return 0;}

0 0
原创粉丝点击