1090. Highways
2011-04-30 00:10 Min·zc 阅读(127) 评论(0) 编辑 收藏 举报贪心求最小生成树中的最大权
传送门
--------------------------------------------
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 }