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 }

 

posted @ 2018-10-16 18:58  huluxin  阅读(446)  评论(0编辑  收藏  举报