POJ 1861 Network 最小生成树

原创 2015年07月06日 18:36:11


题意:有一些公司,公司之间需要连接起来。给出了哪些公司可以连接以及连接边的长度。求最小生成树中最大的边,以及最小生成树的边数,以及输出一颗可行的最小生成树。

思路:基本上就是裸的kruskal了。可以水之。

代码:

  1. #include <iostream>  
  2. #include <cstdio>   
  3. #include <string.h>  
  4. #include <algorithm>  
  5. using namespace std;  
  6.   
  7. const int N = 1010, M = 15010;  
  8. struct edge{  
  9.     int x,y,value;  
  10. }ee[M];  
  11. struct solve{  
  12.     int lp,rp;  
  13. }ss[M];  
  14. int father[N],numedge,n,m,cnt,numsolve;  
  15. bool cmp(edge a,edge b){  
  16.     return a.value < b.value;  
  17. }  
  18. int find(int x){  
  19.     if(father[x] == x)  
  20.         return father[x];  
  21.     return find(father[x]);  
  22. }  
  23. bool Union_Set(int x,int y){  
  24.     int lp = find(x);  
  25.     int rp = find(y);  
  26.     if(lp == rp)  
  27.         return false;  
  28.     else{  
  29.       father[lp] = rp;  
  30.       return true;  
  31.     }  
  32. }  
  33. int kruskal(){  
  34.     cnt = 0;  
  35.     int mmax = 0;  
  36.     numsolve = 0;  
  37.     for(int i = 1; i <= n; ++i)  
  38.         father[i] = i;  
  39.     for(int i = 0; i < numedge; ++i){  
  40.       int lx = ee[i].x;  
  41.       int rx = ee[i].y;  
  42.       if(Union_Set(lx,rx)){  
  43.         cnt++;  
  44.         if(mmax < ee[i].value)  
  45.             mmax = ee[i].value;  
  46.         ss[numsolve].lp = lx;  
  47.         ss[numsolve].rp = rx;  
  48.         numsolve++;  
  49.       }  
  50.     }  
  51.     return mmax;  
  52. }  
  53. int main(){  
  54.     while(scanf("%d%d",&n,&m) != EOF){  
  55.       int x,y,z;  
  56.       numedge = 0;  
  57.       while(m--){  
  58.         scanf("%d%d%d",&x,&y,&z);  
  59.         ee[numedge].x = x;  
  60.         ee[numedge].y = y;  
  61.         ee[numedge].value = z;  
  62.         numedge++;  
  63.       }  
  64.       sort(ee,ee+numedge,cmp);  
  65.       int ans = kruskal();  
  66.       printf("%d\n",ans);  
  67.       printf("%d\n",cnt);  
  68.       for(int i = 0; i < numsolve; ++i)  
  69.           printf("%d %d\n",ss[i].lp,ss[i].rp);  
  70.     }  
  71.     return 0;  
  72. }  
版权声明:本文为博主http://www.feixueteam.net原创文章,未经博主允许不得转载。

POJ 1861-Network(最小生成树-Kruskal)

Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16043   Accepted: 6360   ...
  • MIKASA3
  • MIKASA3
  • 2016年07月30日 18:50
  • 210

POJ 1861 Network ---最小生成树

求最小生成树,然后输出。。 #include #include #include using namespace std; int n,m; struct node{ int a,b,l...
  • u010489389
  • u010489389
  • 2013年07月13日 14:42
  • 418

poj 1861 Network 最小生成树

Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 12839 Accepted: 4937 Special Judg...
  • hmemoryl
  • hmemoryl
  • 2014年04月01日 21:35
  • 574

POJ 1861 Network【最小生成树】

Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 158...
  • mengxiang000000
  • mengxiang000000
  • 2016年06月01日 12:25
  • 209

poj 1861 Network(最小生成树)

Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 13680   A...
  • u012860428
  • u012860428
  • 2014年09月01日 21:11
  • 390

POJ 1861 Network 最小生成树

来源:http://poj.org/problem?id=1861 题意:有一些公司,公司之间需要连接起来。给出了哪些公司可以连接以及连接边的长度。求最小生成树中最大的边,以及最小生成树的边数,以及...
  • wmn_wmn
  • wmn_wmn
  • 2012年08月18日 20:49
  • 1237

POJ 2349 Arctic Network(最小生成树)

Arctic Network Time Limit: 2000MS   Memory Limit: 65536K       Description The Department...
  • LYHVOYAGE
  • LYHVOYAGE
  • 2014年02月25日 20:33
  • 4579

POJ 题目1861 Network(最小生成树)

Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 14062   Accep...
  • yu_ch_sh
  • yu_ch_sh
  • 2015年03月01日 21:05
  • 289

poj 1861 Network(图论:最小生成树)

给出n个点,并给出m对点和它们之间的juli
  • u011639256
  • u011639256
  • 2014年07月22日 18:10
  • 304

POJ 1861 Network(最小生成树+克鲁斯卡尔)

Andrew is working as system administrator and is planning to establish a new network in his company....
  • qq_37497322
  • qq_37497322
  • 2017年08月17日 21:16
  • 77
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 1861 Network 最小生成树
举报原因:
原因补充:

(最多只允许输入30个字)