Graph Theory NO.8 HDU_1863_畅通工程_最小生成树

来源:互联网 发布:淘宝茶叶不好卖了 编辑:程序博客网 时间:2024/06/09 18:57

昨天RE了一晚上,今天重新打了一遍就过了,莫名其妙;

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define INF 0xffffffusing namespace std;int n,m;int visit[110];int G[110][110];int low[110];int prim(){    for(int i=1;i<=m;i++)    {        low[i]=G[i][1];        visit[i]=0;    }    visit[1]=0;    int sum=0;    for(int i=1;i<=m;i++)    {        int temp=INF,pos;        for(int j=1;j<=m;j++)        {            if(!visit[j]&&low[j]<temp)            {                temp=low[j];                pos=j;            }        }        visit[pos]=1;        if(temp==INF)        {            return -1;        }        sum+=temp;        for(int j=1;j<=m;j++)        {            if(!visit[j]&&G[pos][j]<low[j])            {                low[j]=G[pos][j];            }        }    }    return sum;}int main(){    int a,b,c;    while(~scanf("%d%d",&n,&m),n)    {        for(int i=0;i<=m;i++)        {            for(int j=0;j<=m;j++)            {                G[i][j]=INF;            }            G[i][i]=0;        }        for(int i=0;i<n;i++)        {            scanf("%d%d%d",&a,&b,&c);            G[a][b]=G[b][a]=c;        }        int ans=prim();        if(ans==-1)        {            printf("?\n");        }        else        {            printf("%d\n",ans);        }    }    return 0;}