POJ2485-Highways

转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1299323790

 

提示:题意很简单,就是求最小生成树的最大边。继续Prim吧O(∩_∩)O

 

 1 //Memory Time 
2 //656K 766MS
3 //思路、解法都和POJ1789基本一致,只是多了一个判定条件
4
5 #include<iostream>
6 using namespace std;
7
8 const int inf=65540; //无限大
9 int dist[501][501];
10 int n; //村落数量
11
12 int prim(void)
13 {
14 int s=1;
15 int m=1;
16 bool u[501]={false};
17 u[s]=true;
18
19 int min_w;
20 int point;
21 int max_in_min=0;
22
23 int low_dis[501];
24 memset(low_dis,inf,sizeof(low_dis));
25
26 while(true)
27 {
28 if(m==n)
29 break;
30
31 min_w=inf;
32 for(int i=2;i<=n;i++)
33 {
34 if(!u[i] && low_dis[i]>dist[s][i])
35 low_dis[i] = dist[s][i];
36 if(!u[i] && min_w>low_dis[i])
37 {
38 min_w = low_dis[i];
39 point=i;
40
41 }
42 }
43 if(max_in_min<min_w) //寻找最小生成树中的最长路径
44 max_in_min = min_w;
45 s=point;
46 u[s]=true;
47 m++;
48 }
49 return max_in_min;
50 }
51
52 int main(void)
53 {
54 int test;
55 cin>>test;
56 while(test--)
57 {
58 /*Input*/
59
60 cin>>n;
61
62 int w; //两点间边权(临时变量)
63 for(int i=1;i<=n;i++)
64 for(int j=1;j<=n;j++)
65 cin>>dist[i][j];
66
67 /*Prim Algorithm & Output*/
68
69 cout<<prim()<<endl;
70
71 }
72 return 0;
73 }

你可能感兴趣的:(poj)