Gym-100712F-Travelling Salesman
2016-05-12 21:28
218 查看
求最小生成树的最大边
拍了个模板,然后处理每一个边的权值,每次处理一个减去一个边。因为树的边数=节点数-1,即n-1,当处理到n==1,结束
拍了个模板,然后处理每一个边的权值,每次处理一个减去一个边。因为树的边数=节点数-1,即n-1,当处理到n==1,结束
#include <bits/stdc++.h> //#pragma comment(linker, "/STACK:102400000, 102400000") using namespace std; const int maxn = 100005; struct edge{ int u, v, w; bool operator < (const edge & p) const { return w < p.w; } } edges[maxn]; int p[maxn]; int n, m; int _find(int x){ return p[x]==x ? x : p[x]=_find(p[x]); } int kruskal(){ for (int i=1; i<=n; ++i) p[i] = i; int ans = 0; sort(edges, edges+m); for (int i=0; i<m; ++i){ int x=_find(edges[i].u), y=_find(edges[i].v); if (x != y){ ans = max(ans, edges[i].w); p[x] = y; --n; } if (n == 1) break; } return ans; } int main(){ #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int T; scanf("%d", &T); while (T--){ scanf("%d%d", &n, &m); for (int i=0; i<m; ++i) scanf("%d%d%d", &edges[i].u, &edges[i].v, &edges[i].w); printf("%d\n", kruskal()); } return 0; }
相关文章推荐
- poj 1754 I Hate It --线段树(单点更新,区间求最大值)
- mac下卸载mysql
- spring在web容器启动时执行初始化方法
- 在Fragment中使用自定义的PopupWindow(带动画效果)
- 实验三 进程调度模拟程序
- 趣学 C 语言(九)—— 复杂指针解析
- 01背包-Robberies
- C++学习笔记(1) —— 有关在函数参数表后的const
- OpenCV实践之路——人脸识别之一数据收集和预处理
- Python包管理工具介绍
- Gym-100712E-Epic Professor
- Hadoop RecordReader
- git的学习笔记(分支管理)
- 实验三 进程调度模拟程序
- AndroidStudio技巧之copy工程
- bestcoder 百度之星 1002 列变位法解密
- 矩形嵌套
- Exercise(20):蛇形填数
- Unity3d-Shader-光照模型
- 矩形嵌套