POJ 1797(最大生成树prim)
mmp,到n就行,不用每个点都到,wa到哭泣
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorithm> 6 #include <queue> 7 #include <stack> 8 #include <vector> 9 #include <iomanip> 10 using namespace std; 11 int map[1010][1010],n,m,d[1010],vis[1010]; 12 int prim() 13 { 14 d[1]=0; 15 int ans=1e9; 16 for(int i=1;i<=n;i++) 17 d[i]=map[1][i]; 18 vis[1]=1; 19 int end=1; 20 for(int i=1;i<=n;i++) 21 { 22 int mmin=-1e8; 23 for(int j=1;j<=n;j++) 24 { 25 if(!vis[j]&&d[j]>mmin) 26 { 27 end=j; 28 mmin=d[j]; 29 } 30 } 31 ans=min(ans,mmin); 32 if(end==n) 33 break;; 34 vis[end]=1; 35 for(int j=1;j<=n;j++) 36 { 37 if(!vis[j]&&d[j]<map[end][j]) 38 d[j]=map[end][j]; 39 } 40 } 41 return ans; 42 } 43 int main(int argc, char *argv[]) 44 { 45 int t,cout=0; 46 scanf("%d",&t); 47 while(t--) 48 { 49 cout++; 50 scanf("%d%d",&n,&m); 51 memset(vis,0,sizeof(vis)); 52 for(int i=0;i<=n;i++) 53 for(int j=0;j<=n;j++) 54 if(i==j) 55 map[i][j]=0; 56 else 57 map[i][j]=-1e8; 58 for(int i=0;i<m;i++) 59 { 60 int x,y,z; 61 scanf("%d%d%d",&x,&y,&z); 62 if(map[x][y]<z) 63 map[x][y]=map[y][x]=z; 64 } 65 66 printf("Scenario #%d:\n%d\n\n",cout,prim()); 67 } 68 69 return 0; 70 }