POJ 1287

来源:互联网 发布:消费积分软件 编辑:程序博客网 时间:2024/05/17 19:20

【题目分析】
    最小生成树。
   


【代码】

#include <cstdio>#include <cmath>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int n,m,cnt=0,ans;int fr[15001],to[15001],w[15001];int f[15001],rank[15001];inline bool cmp(int a,int b){return w[a]<w[b];}inline int gf(int k){if (f[k]==k) return k; else return f[k]=gf(f[k]);}int main(){    while(scanf("%d",&n)!=EOF&&n)    {        ans=0;        scanf("%d",&m);        for (int i=1;i<=m;++i)            scanf("%d%d%d",&fr[i],&to[i],&w[i]);        for (int i=1;i<=n;++i) f[i]=i;        for (int i=1;i<=m;++i) rank[i]=i;        sort(rank+1,rank+m+1,cmp);        for (int i=1;i<=m;++i)        {            int l=fr[rank[i]],r=to[rank[i]];            int fl=gf(l),fr=gf(r);            if (fl!=fr)            {                ans+=w[rank[i]];                f[fl]=fr;            }        }        printf("%d\n",ans);    }}
0 0
原创粉丝点击