POJ1861(Network)-Kruskal
Posted ygsworld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ1861(Network)-Kruskal相关的知识,希望对你有一定的参考价值。
Sample Input
4 6
1 2 1
1 3 1
1 4 2
2 3 1
3 4 1
2 4 1
Sample Output
1
4
1 2
1 3
2 3
3 4
题目意思:4个点,6个边,每个边有对应的权值。最后输出一行为路径中最大的边的值,第二行为路径上边的总数,
第三行为每条边的始末编号。题目需要求出最小生成树的最大边的最小值。
1 /* 2 Problem: 1861 User: 3 Memory: 416K Time: 500MS 4 Language: C++ Result: Accepted 5 */ 6 #include <iostream> 7 #include <algorithm> 8 using namespace std; 9 10 #define MAX 15010 11 int p[1010];//存放父亲结点 12 13 struct Edge 14 15 int u; 16 int v; 17 int w; 18 map[MAX],ans[MAX]; 19 20 bool cmp(Edge a,Edge b) 21 22 return a.w<b.w; 23 24 25 int Find(int a) 26 27 return a==p[a]?a:a=Find(p[a]); 28 29 30 int main() 31 32 int N,M,i; 33 int a,b,c; 34 cin>>N>>M; 35 for(i=0;i<=N;i++) 36 37 p[i] = i; 38 39 for(i=0;i<M;i++) 40 41 cin>>a>>b>>c; 42 map[i].u = a; 43 map[i].v = b; 44 map[i].w = c; 45 46 sort(map,map+M,cmp); 47 int count = 0; 48 int maxEdge = 0; 49 for(i=0;i<M;i++) 50 int x = Find(map[i].u); 51 int y = Find(map[i].v); 52 if(x != y) 53 54 p[x] = y;//不在一个集合,合并 55 ans[count].u = map[i].u; 56 ans[count].v = map[i].v; 57 count ++; 58 if(map[i].w>maxEdge) 59 maxEdge = map[i].w; 60 61 62 cout<<maxEdge<<endl;//路径中最长的边 63 cout<<count<<endl;//边的总数 64 for(i=0;i<count;i++) 65 cout<<ans[i].u<<" "<<ans[i].v<<endl;/输出每条路径 66 return 0; 67
以上是关于POJ1861(Network)-Kruskal的主要内容,如果未能解决你的问题,请参考以下文章