标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12903 Accepted Submission(s):
3549
#include<stdio.h> #include<string.h> #define MAX 550 #define INF 0x3f3f3f int city; int visit[MAX],map[MAX][MAX],low[MAX]; void prime() { int j,i,min,mincost=0,next; memset(visit,0,sizeof(visit)); for(i=1;i<=city;i++) { low[i]=map[1][i]; } visit[1]=1; for(i=1;i<city;i++) { min=INF; for(j=1;j<=city;j++) { if(!visit[j]&&min>low[j]) { next=j; min=low[j]; } } if(min==INF) { printf("-1\n"); return ; } mincost+=min; visit[next]=1; for(j=1;j<=city;j++) { if(!visit[j]&&low[j]>map[next][j]) low[j]=map[next][j]; } } printf("%d\n",mincost); } int main() { int n,m,j,i,k,q,p,c,t,x,y,l; int a[MAX]; scanf("%d",&n); while(n--) { scanf("%d%d%d",&city,&m,&k); for(i=1;i<=city;i++) { for(j=1;j<=city;j++) { if(i==j) map[i][j]=0; else map[i][j]=INF; } } for(i=1;i<=m;i++) { scanf("%d%d%d",&p,&q,&c); if(map[p][q]>c) map[p][q]=map[q][p]=c; } while(k--) { scanf("%d",&t); for(l=1;l<=t;l++) scanf("%d",&a[l]); for(i=1;i<t;i++) { for(j=i+1;j<=t;j++) { map[a[i]][a[j]]=map[a[j]][a[i]]=0; } } } prime(); } return 0; }
标签:
原文地址:http://www.cnblogs.com/tonghao/p/4542415.html