hdu 1863 畅通工程

来源:互联网 发布:百度地图网络异常 编辑:程序博客网 时间:2024/05/16 15:40

题意很好理解。我用了最小生成树,prim算法。

#include<stdio.h>#include<string.h>int map[105][105];int prim(int n){int i,j,min,sum=0;int pos, vis[105],d[105];memset(vis,0,sizeof(vis));for(i=1;i<=n;i++)d[i]=map[1][i];vis[1]=1;for(i=1;i<n;i++){min=10000000;for(j=1;j<=n;j++){if(vis[j]==0&&min>=d[j]){min=d[j];pos=j;}}vis[pos]=1;sum+=min;for(j=2;j<=n;j++){if(vis[j]==0&&d[j]>map[pos][j]){d[j]=map[pos][j];}}}return sum;}int main(){int n,m;int a,b,d,sum;while(scanf("%d%d",&n,&m),n){for(int i=0;i<=m;i++){for(int j=0;j<=m;j++)map[i][j]=10000000;}for(int i=0;i<=m;i++)map[i][i]=0;for(int i=0;i<n;i++){scanf("%d%d%d",&a,&b,&d);map[a][b]=map[b][a]=d;}sum=prim(m);if(sum>=10000000)printf("?\n");elseprintf("%d\n",sum);}return 0;}


 

0 0