poj 1861
来源:互联网 发布:12306数据库 编辑:程序博客网 时间:2024/04/18 13:17
刚开始没懂样例,看了discuss才知道.这个题就是考Kruskal.
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define inf 99999999const int maxn = 1010;using namespace std;struct edge{ int l,r,w;}ee[maxn*maxn/2];int map[maxn][maxn],rt[maxn],path[maxn][2];int nedge;bool flag[maxn];bool Cmp(edge a, edge b) {return a.w < b.w;}void Build(int n){ for(int i = 1; i <= n; ++i) rt[i] = i;}int Find(int x){ if(rt[x] == x) return x; return Find(rt[x]);}void Union(int x,int y){ int rt1 = rt[x]; int rt2 = rt[y]; if(rt1 != rt2) rt[rt1] = rt2;}void Kruskal(int n){ int rt1,rt2; int k = 0,ans = -1; for(int i = 0; i < nedge; ++i){ rt1 = Find(ee[i].l); rt2 = Find(ee[i].r); if(rt1 != rt2){ Union(rt1,rt2); path[k][0] = ee[i].l; path[k][1] = ee[i].r; k++; if(ans < ee[i].w) ans = ee[i].w; if(k == n) break; } } printf("%d\n%d\n",ans,n-1); for(int i = 0; i < k; ++i) printf("%d %d\n",path[i][0],path[i][1]);}int main(){ int n; while(~scanf("%d",&n)){ Build(n); int m; scanf("%d",&m); nedge = 0; while(m--){ int a,b,len; scanf("%d %d %d",&a,&b,&len); ee[nedge].l = a; ee[nedge].r = b; ee[nedge].w = len; nedge++; } sort(ee,ee+nedge,Cmp); Kruskal(n); } return 0;}
- poj 1861
- POJ 1861
- poj 1861
- POJ 1861
- poj 1861
- poj 1861
- poj-1861
- POJ 1861
- poj 1861
- POJ 1861
- POJ 1861
- POJ 1861 Networks
- POJ 1861 Network
- poj 1861 Network
- POJ 1861 Network
- poj 1861 network
- poj 1861 network
- poj 1861 network
- MySQL数据库乱码 - Linux下乱码问题一
- Redhat 6.2上安装M2Crypto记录
- hdu(2674)
- Java API 自带的日志管理,可配置文件路径,并自动创建不存在的目录
- 翰歌世纪来成都传智播客招兵买马
- poj 1861
- 按键驱动学习
- UVA 10806 Dijkstra, Dijkstra.(费用流)
- zebra路由软件使用大全
- http的由来
- 怎么去学php程序?
- codeforces 337D Book of Evil
- opencv 通过摄像头捕捉头部
- 【§维修不如报废细数主板五大致命故障§meitong】