标签:
http://poj.org/problem?id=2421
这个题和poj1258是一样的,只要在1258的基础上那么几行代码,就可以A,水。
题意:还是n连通问题,和1258不同的就是这个还有几条路在之前就已经连通了的,所以不需要再去连。
1 #include <stdio.h> 2 #include <string.h> 3 4 5 #define inf 100009 6 7 bool mark[1001]; 8 int a[1001][1001],dis[1001],ans,n; 9 10 int prim() 11 { 12 for(int i=1;i<=n;i++) 13 dis[i]=inf;dis[1]=0; 14 for(int i=1;i<=n;i++){ 15 int tep=inf;int k=0; 16 for(int j=1;j<=n;j++){ 17 if(mark[j]&&dis[j]<tep) 18 { 19 tep=dis[j]; 20 k=j; 21 } 22 } 23 if(tep==inf) return 0; 24 ans+=tep; 25 mark[k]=false; 26 for(int j=1;j<=n;j++) 27 if(mark[j]&&dis[j]>a[k][j]) 28 dis[j]=a[k][j]; 29 } 30 return 0; 31 } 32 33 int main() 34 { 35 while(scanf("%d",&n)!=EOF) 36 { 37 int x=0,c,b; 38 memset(mark,true,sizeof(mark)); 39 ans=0; 40 for(int i=1;i<=n;i++) 41 for(int j=1;j<=n;j++) 42 scanf("%d",&a[i][j]); 43 scanf("%d",&x); 44 while(x--) 45 { 46 scanf("%d%d",&b,&c); 47 a[b][c]=0; 48 a[c][b]=0; 49 } 50 prim(); 51 printf("%d\n",ans); 52 } 53 }
标签:
原文地址:http://www.cnblogs.com/Tree-dream/p/5726457.html