wikioi p1078 最小生成树

来源:互联网 发布:python 爬虫 伯乐在线 编辑:程序博客网 时间:2024/06/06 00:02

恩,最小生成树。

用的克鲁斯卡的算法,善用并查集。

#include<stdio.h>#include<iostream>#include<memory.h>#include<algorithm>using namespace std;const int MAX_N =101;struct node {int s,t,d;}R[MAX_N*MAX_N]; int N;int M;int ans=0;int T[MAX_N];int cmp(const node a,const node b){if (a.d<b.d) return 1;else return 0;}int init(){scanf("%d",&N);M=0;int i,j;for (i=1;i<=N;i++)for (j=1;j<=N;j++){M++;scanf("%d",&R[M].d);R[M].s=i;R[M].t=j;if(!R[M].d) M--;}sort(R+1,R+M+1,cmp);memset(T,-1,sizeof(T));}int findR(int t){if (T[t]==-1) return t;else return T[t]=findR(T[t]);}int work(){int l=0;int i=1;while(i<=M&&l<N-1){int x=findR(R[i].s);int y=findR(R[i].t);if(x!=y){l++;ans+=R[i].d;T[x]=y;} i++;}}int put(){printf("%d",ans);}int main(){init();work();put();return 0; } 


 

原创粉丝点击