POJ 2377

来源:互联网 发布:烟台市网络党校app 编辑:程序博客网 时间:2024/06/06 09:34

1A水过,kruskal

#include<cstdio>#include<algorithm>using namespace std;int n,m;struct node{int u,v,c;}edge[20000+5];bool cmp(node a,node b){return a.c>b.c;}int par[1005],rank[1005];void init(){for(int i=1;i<=n;i++){par[i]=i;rank[i]=0; }}int find(int x){return( par[x]==x ? x : par[x]=find(par[x]) );} void unite(int x,int y)  {      x=find(x),y=find(y);      if(x == y) return;      if(rank[x] < rank[y]) par[x]=y;      else      {          par[y]=x;          if(rank[x] == rank[y]) rank[x]++;      }  }int kruskal(){int ans=0,cnt=0;init();for(int i=1;i<=m;i++){int x=find(edge[i].u) , y=find(edge[i].v);if(x!=y){unite(x,y);ans+=edge[i].c;if(++cnt == n-1) break;}}if(cnt == n-1) return ans;else return -1;}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++) scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].c);sort(edge+1,edge+m+1,cmp);printf("%d\n",kruskal());}


0 0
原创粉丝点击