标签:
3 0 990 692 990 0 179 692 179 0 1 1 2
179
最小生成树....先建图,之后再处理相同地点....只需要遍历一半就行....
时间超限:
1 #include <vector> 2 #include <map> 3 #include <set> 4 #include <algorithm> 5 #include <iostream> 6 #include <cstdio> 7 #include <cmath> 8 #include <cstdlib> 9 #include <string> 10 #include <cstring> 11 #include <queue> 12 using namespace std; 13 #define INF 0x3f3f3f3f 14 #define MAX 1000000 15 16 int n,ans; 17 int dis[111],vis[111],mp[111][111]; 18 19 void prim() 20 { 21 memset(vis,0,sizeof(vis)); 22 memset(dis,INF,sizeof(dis)); 23 dis[1]=0;ans=0;dis[0]=INF; 24 while(true){ 25 int m=0; 26 for(int i=1; i<=n; i++){ 27 if(!vis[i] && (dis[i]<dis[m])) 28 m=i; 29 } 30 if(m==0) 31 break; 32 vis[m]=1; 33 ans+=dis[m]; 34 for(int i=1; i<=n; i++) 35 dis[i]=min(dis[i],mp[m][i]); 36 } 37 } 38 39 int main() 40 { 41 int x,a,b; 42 while(scanf("%d",&n)){ 43 if(n==1) 44 break; 45 for(int i=1; i<=n; i++){ 46 for(int j=1; j<=n; j++){ 47 scanf("%d",&mp[i][j]); 48 } 49 } 50 scanf("%d",&x); 51 while(x--){ 52 scanf("%d%d",&a,&b); 53 mp[a][b]=mp[b][a]=0; 54 } 55 prim(); 56 printf("%d\n",ans); 57 } 58 59 }
AC代码:
1 #include <vector> 2 #include <map> 3 #include <set> 4 #include <algorithm> 5 #include <iostream> 6 #include <cstdio> 7 #include <cmath> 8 #include <cstdlib> 9 #include <string> 10 #include <cstring> 11 #include <queue> 12 using namespace std; 13 #define INF 0x3f3f3f3f 14 #define MAX 1000000 15 16 int n,ans; 17 int dis[111],vis[111],mp[111][111]; 18 19 void prim() 20 { 21 memset(vis,0,sizeof(vis)); 22 memset(dis,INF,sizeof(dis)); 23 dis[1]=0; 24 ans=0; 25 dis[0]=INF; 26 while(true){ 27 int m=0; 28 for(int i=1; i<=n; i++){ 29 if(!vis[i] && dis[i]<dis[m]) 30 m=i; 31 } 32 if(m==0) 33 break; 34 vis[m]=1; 35 ans+=dis[m]; 36 for(int i=1; i<=n; i++) 37 dis[i]=min(dis[i],mp[m][i]); 38 } 39 } 40 41 int main() 42 { 43 int x,a,b; 44 while(scanf("%d",&n)==1){ 45 for(int i=1; i<=n; i++){ 46 for(int j=1; j<=n; j++){ 47 scanf("%d",&mp[i][j]); 48 } 49 } 50 scanf("%d",&x); 51 while(x--){ 52 scanf("%d%d",&a,&b); 53 mp[a][b]=mp[b][a]=0; 54 } 55 prim(); 56 printf("%d\n",ans); 57 } 58 59 }
标签:
原文地址:http://www.cnblogs.com/wangmengmeng/p/5307995.html