UVA - 1395 - Slim Span(Kruskal算法+枚舉)

將邊按權值排序後,枚舉最小權值的邊,ios

從第一個邊開始,直到日後可以構成生成樹,而且記錄中間出現過的最大權值和最小權值,spa

最後不斷取最小值便可code

切記每次枚舉前,都要初始化父親節點blog

 

 1 #include<cstdio>  
 2 #include<cstring>  
 3 #include<cctype>  
 4 #include<cstdlib>  
 5 #include<cmath>  
 6 #include<iostream>  
 7 #include<sstream>  
 8 #include<iterator>  
 9 #include<algorithm>  
10 #include<string>  
11 #include<vector>  
12 #include<set>  
13 #include<map>  
14 #include<deque>  
15 #include<queue>  
16 #include<stack>  
17 #include<list>  
18 typedef long long ll;  
19 typedef unsigned long long llu;  
20 const int MAXN = 100 + 10;  
21 const int MAXT = 100000 + 10;  
22 const int INF = 0x7f7f7f7f;  
23 const double pi = acos(-1.0);  
24 const double EPS = 1e-6;  
25 using namespace std;  
26   
27 struct Line{  
28     int be, en, v;  
29     Line() : be(0), en(0), v(0) {}  
30     bool operator < (const Line &b) const{  
31         return v < b.v;  
32     }  
33 }p[MAXT];  
34   
35 int fa[MAXN], n, m;  
36   
37 int find(int v){  
38     return fa[v] = fa[v] == v ? v : find(fa[v]);  
39 }  
40   
41 int init(){  
42     for(int i = 0; i <= n; ++i)  fa[i] = i;  
43 }  
44   
45 int main(){  
46     while(scanf("%d%d", &n, &m) == 2 && (n || m)){  
47         for(int i = 0; i < m; ++i)  scanf("%d%d%d", &p[i].be, &p[i].en, &p[i].v);  
48         sort(p, p + m);  
49         int ans = INF;  
50         for(int i = 0; i < m; ++i){  
51             int tmp = 0, cnt = n, ma = -1, mi = INF;  
52             init();  
53             for(int j = i; j < m; ++j){  
54                 int t1 = find(p[j].be);  
55                 int t2 = find(p[j].en);  
56                 if(t1 != t2){  
57                     fa[t1] = t2;  
58                     ma = max(ma, p[j].v);  
59                     mi = min(mi, p[j].v);  
60                     if(--cnt == 1)  break;  
61                 }  
62             }  
63             if(cnt == 1)  ans = min(ans, ma - mi);  
64             else  break;  
65         }  
66         printf("%d\n", ans == INF ? -1 : ans);  
67     }  
68     return 0;  
69 }  
相關文章
相關標籤/搜索