hdu 1879 继续畅通工程
来源:互联网 发布:孙策玉玺换兵马 知乎 编辑:程序博客网 时间:2024/05/01 20:03
模板题。。
链接:点击打开链接
#include<iostream>#include<cstring>using namespace std;#define INF 9999999int edges[101][101],lowcost[101],vexset[101];int sum,n;void prim(int v){ int i,j,k,min; for(i=2;i<=n;i++) { lowcost[i]=edges[v][i]; vexset[i]=0; } vexset[v]=1; sum=0; for(i=2;i<=n;i++) { min=INF; for(j=2;j<=n;j++) { if(vexset[j]==0&&lowcost[j]<min) { min=lowcost[j]; k=j; } } vexset[k]=1; if(min!=INF) sum+=min; v=k; for(j=2;j<=n;j++) { if(vexset[j]==0&&edges[v][j]<lowcost[j]) { lowcost[j]=edges[v][j]; } } }}int main(){ int i,a,b,c,d,j,m; while(~scanf("%d",&n)&&n!=0) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) edges[i][j]=INF; m=n*(n-1)/2; for(i=0;i<m;i++) { scanf("%d %d %d %d",&a,&b,&c,&d); if(d!=1) { edges[a][b]=c; edges[b][a]=c; } else { edges[a][b]=0; edges[b][a]=0; } } prim(1); printf("%d\n",sum); } return 0;}