标签:map 题目 Network int MAX Kruskal Edge POJ1861 include
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 }View Code
标签:map,题目,Network,int,MAX,Kruskal,Edge,POJ1861,include 来源: https://www.cnblogs.com/ygsworld/p/11256659.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。