Hud 1863 畅通工程[MST(kruscal)]

来源:互联网 发布:蔡司三坐标软件 编辑:程序博客网 时间:2024/06/11 05:10

题目连接:点击打开链接

最简单的最小生成树(WA了2次,对路的排序出了点错)。

#include<cstdio>#include<algorithm>using namespace std;const int Max=5000;const int N=105;int n,m,father[N];struct Rode{    int a,b;    int lenth;}rode[Max];void Init(){    for(int i=0;i<=n;i++)    father[i]=i;}bool cmp(Rode a,Rode b){    if(a.lenth<b.lenth) return true;    return false;}int find(int x){    if(x!=father[x])    father[x]=find(father[x]);    return father[x];}int kruscal(){    int min=0;    sort(rode,rode+m,cmp);//这里的开始排了n条路.    for(int i=0;i<m;i++)    {        int x=find(rode[i].a);        int y=find(rode[i].b);        if(x!=y)        {            father[x]=y;            min+=rode[i].lenth;        }    }    int f=find(n),k=0;    for(int i=1;i<=n;i++)    if(find(i)==f) k++;    if(k==n) return min;    else return -1;}int main(){    while(scanf("%d%d",&m,&n)&&m)    {        Init();        for(int i=0;i<m;i++)        scanf("%d%d%d",&rode[i].a,&rode[i].b,&rode[i].lenth);        int flag=kruscal();        if(flag!=-1) printf("%d\n",flag);        else printf("?\n");    }}


又一次WA在了细节上。

原创粉丝点击