标签:
题目分析:这个题和hdu 1233差不多,就是加了一个状态,因此我们可以先判断每条路的状态,如果是修好的,就让它们的成本是0;如果没修,就让成本给出的成本。这样问题的处理就和1233一样了。
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define inf 0x3f3f3f3f int map[100][100]; int s[100],vis[100]; int n,m; int prim() { int i,j,t,p,min,cnt,minpos; int ans=0; cnt=0; vis[1]=1; s[cnt++]=1; while(cnt<n){ t=cnt; min=inf; for(i=0;i<t;i++){ p=s[i]; for(j=1;j<=n;j++){ if(!vis[j]&&map[p][j]<min){ min=map[p][j]; minpos=j; } } } ans+=min; s[cnt++]=minpos; vis[minpos]=1; } return ans; } int main() { int i,sum; while(~scanf("%d",&n)&&n){ memset(vis,0,sizeof(vis)); memset(map,inf,sizeof(map)); int b,c,d,sta; m=n*(n-1)/2; for(i=0;i<m;i++){ scanf("%d%d%d%d",&b,&c,&d,&sta); if(sta==0) map[b][c]=map[c][b]=d; else map[b][c]=map[c][b]=0; } sum=prim(); printf("%d\n",sum); } return 0; }
标签:
原文地址:http://blog.csdn.net/a197p/article/details/46048877