题意:计算出全省畅通需要的最低成本,本题是一个Prim算法的模版题,加一个判断就可以了.当该路短已经存在时就令其为0.
连接:http://acm.hdu.edu.cn/showproblem.php?pid=1879
View Code
#include <iostream> using namespace std; const int INF=0x7ffffff; const int MAX=100+10; int map[MAX][MAX]; int used[MAX]; int dis[MAX]; int sum; int n; void Prim() { memset(used,0,sizeof(used)); for(int i=1;i<=n;i++) { dis[i]=INF; } dis[1]=0; for(i=1;i<=n;i++) { int Min=INF; int index; for(int j=1;j<=n;j++) { if(!used[j]&&dis[j]<Min)//找最小值 { Min=dis[j]; index=j; } } sum+=dis[index]; used[index]=1; for(j=1;j<=n;j++) { if(!used[j]&&dis[j]>map[index][j])//松弛操作 { dis[j]=map[index][j]; } } } return; } int main() { while(scanf("%d",&n),n) { sum=0; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { map[i][j]=INF; } } int T=n*(n-1)/2; while(T--) { int a; int b; int value; int k; scanf("%d%d%d%d",&a,&b,&value,&k); if(k==1)//判断是否为1 { map[a][b]=0; map[b][a]=0; } else { map[a][b]=value; map[b][a]=value; } } Prim(); printf("%d\n",sum); } return 0; }