代码改变世界

1090. Highways

2011-04-30 00:10  Min·zc  阅读(127)  评论(0编辑  收藏  举报

贪心求最小生成树中的最大权

传送门

http://soj.me/1090

--------------------------------------------

 1 #include <iostream>

 2 #include <memory.h>
 3 using namespace std;
 4 int road[510][510];
 5 int dis[510];
 6 int vi[510];
 7 int n;
 8 int prim()
 9 {
10         int ans=-1;
11         for(int i=0;i<n;i++)
12                 dis[i]=road[0][i];
13         int num=1;
14         vi[0]=1;
15         while(num!=n)
16         {
17                 int v;
18                 int min=65540;
19                 for(int i=0;i<n;i++)
20                         if(dis[i]!=0&&dis[i]<min)
21                         {
22                                 v=i;
23                                 min=dis[i];
24                         }
25                 vi[v]=1;
26                 if(ans<min)
27                         ans=min;
28                 dis[v]=0;
29                 for(int i=0;i<n;i++)
30                         if(road[v][i]!=0&&vi[i]!=1&&dis[i]>road[v][i])
31                                 dis[i]=road[v][i];
32                 num++;
33         }
34         return ans;
35 }
36 void init()
37 {
38         memset(vi,0,sizeof(vi));
39         cin>>n;
40         for(int i=0;i<n;i++)
41                 for(int j=0;j<n;j++)
42                         cin>>road[i][j];
43 
44 }
45 int main()
46 {
47         int t;
48         cin>>t;
49         while(t--)
50         {
51                 init();
52                 cout<<prim()<<endl;
53                 cout<<endl;
54         }
55 }