poj 2395 最小生成树的最大边
2015-07-20 17:19
274 查看
题意:
求最小生成树的最大边。
解析:
kruscal。
昨天刚做的一道一模一样的题。
代码:
求最小生成树的最大边。
解析:
kruscal。
昨天刚做的一道一模一样的题。
代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> #include <cmath> #include <stack> #include <vector> #include <queue> #include <map> #include <climits> #include <cassert> #define LL long long #define lson lo, mi, rt << 1 #define rson mi + 1, hi, rt << 1 | 1 using namespace std; const int maxn = 20000 + 10; const int inf = 0x3f3f3f3f; const double eps = 1e-8; const double pi = acos(-1.0); const double ee = exp(1.0); int n,m; int fa[maxn]; int ans; struct edge { int fr,to,value; bool operator<(const edge& a)const { return value<a.value; } } e[maxn]; void Init() { for (int i = 1; i <= n; i++) { fa[i] = i; } } int Find(int x) { if (fa[x] != x) fa[x] = Find(fa[x]); return fa[x]; } int Kruscal() { int res = 0; sort(e, e + m); for (int i = 0; i < m; i++) { int u = Find(e[i].fr); int v = Find(e[i].to); if (u != v) { fa[v] = u; res += e[i].value; ans = max(ans, e[i].value); } } return res; } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); #endif // LOCAL while (~scanf("%d%d", &n, &m)) { ans = 0; Init(); for (int i = 0; i < m; i++) { scanf("%d%d%d", &e[i].fr, &e[i].to, &e[i].value); } Kruscal(); printf("%d\n", ans); } return 0; }
相关文章推荐
- javascript动画中的“帧”
- DTCMS插件的制作实例电子资源管理(一)插件目录结构
- 如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]
- Tomcat8+redis做session同步
- 用java语言编写一个类,使该类包含一个方法f(),该方法具有可以输出同时带有大小写两种形式英文字母表的功能。
- ThreadLocal用法与实现原理
- [NOIP2014]寻找道路
- android中各种Intent跳转(邮件、音频、联系人....)
- Shell编程入门总结(编辑器Vim篇)
- Stripies
- HTML5学习笔记简明版(4):新元素之video,audio,meter,datalist,keygen,output
- 图片切割方法
- placeholder
- 求多个数的最小公倍数的问题
- Using CSV-Format Log Output
- 什么是向量中断,什么是中断向量?
- Excel中随心所欲显示日期的格式
- Difference between Enumeration and Iterator in Java
- LAMP服务器环境之编译(部分)安装-php的modules模式
- makefile 编写之32 or 64位机器