【最大生成树】POJ 2377

来源:互联网 发布:软件包装盒 编辑:程序博客网 时间:2024/05/22 15:32

最大生成树,prime算法改一下就可以了,注意有重边!!!

#define N 1005int g[N][N];int vis[N];int dis[N];int n;int prime(){    int i,j;    for(i=1;i<=n;i++){        dis[i] = g[1][i];        vis[i] = 0;    }    vis[1] = 1;    dis[1] = 0;    int ans = 0;    for(i=2;i<=n;i++){        int minm = 0;        int k = 0;        for(j=1;j<=n;j++){            if(!vis[j] && dis[j]>minm){                minm = dis[j];                k = j;            }        }        vis[k] = 1;        if(minm==0)return -1;        ans += minm;        for(j=1;j<=n;j++){            if(!vis[j] && dis[j] < g[j][k]){                dis[j] = g[j][k];            }        }    }    return ans;}int main(){    int m;    while(scanf("%d%d",&n,&m) !=-1){        int i,j;        for(i=0;i<=n;i++){            for(j=0;j<=n;j++){                g[i][j] = 0;            }        }        while(m--){            int a,b,c;            scanf("%d%d%d",&a,&b,&c);            g[a][b] = g[b][a] = max(g[a][b],c);//重边!        }        int ans = prime();        printf("%d\n",ans);    }    return 0;}


















原创粉丝点击