UVa 11747 Heavy Cycle Edges(最小生成树)
来源:互联网 发布:qt编程入门视频教程 编辑:程序博客网 时间:2024/06/05 00:56
题意:给一个图,按照找最小生成树的方法,找到环并输出环中其中最大的边。
思路:一样是用Kruskal算法,只不过加边的时候,判断边上两点在不在一个连通集合中,如果在,则说明加上边得到了环,输出这条边。
#include <algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdio>#include <vector>#include <string>#include <queue>#include <stack>#include <cmath>#include <set>#include <map>using namespace std;typedef long long LL;#define mem(a, n) memset(a, n, sizeof(a))#define ALL(v) v.begin(), v.end()#define si(a) scanf("%d", &a)#define sii(a, b) scanf("%d%d", &a, &b)#define siii(a, b, c) scanf("%d%d%d", &a, &b, &c)#define pb push_back#define eps 1e-8const int inf = 0x3f3f3f3f, N = 1e3 + 5, M = 3e4 + 5, MOD = 1e9 + 7;int T, cas = 0;int n, m;int fa[N];struct edge {int u, v, w;edge() {}edge(int u, int v, int w): u(u), v(v), w(w) {}bool operator<(const edge& rhs) const{return w < rhs.w;}}e[M];int find(int x) {if(x == fa[x]) return x;return fa[x] = find(fa[x]);}void work() {vector<int> ans;for(int i = 0; i < n; i ++) fa[i] = i;for(int i = 0; i < m; i ++) {int u = find(e[i].u), v = find(e[i].v);if(u != v) {fa[v] = u;continue;}ans.pb(e[i].w);}int sz = ans.size();if(sz) {for(int i = 0; i < sz - 1; i ++) printf("%d ", ans[i]);printf("%d\n", ans[sz - 1]);} else puts("forest");}int main(){#ifdef LOCAL freopen("/Users/apple/input.txt", "r", stdin);// freopen("/Users/apple/out.txt", "w", stdout);#endif while(sii(n, m), n + m) { int u, v, w; for(int i = 0; i < m; i ++) { siii(u, v, w); e[i] = edge(u, v, w); } sort(e, e + m); work(); } return 0;}
0 0
- (beginer) 最小生成树 UVA 11747 Heavy Cycle Edges
- UVa 11747 Heavy Cycle Edges(最小生成树)
- uva 11747 - Heavy Cycle Edges(生成树)
- UVa 11747 - Heavy Cycle Edges
- uva 11747 Heavy Cycle Edges
- UVA 11747 - Heavy Cycle Edges(MST)
- UVA 11747 Heavy Cycle Edges(MST)
- UVa 544 Heavy Cargo( 最小生成树的variant)
- (beginer) 最小生成树 UVA 544 Heavy Cargo
- uva 544 - Heavy Cargo(生成树)
- poj 1797 Heavy Transportation 最小生成树 最大生成树
- POJ1797 Heavy Transportation (最短路径/最小生成树kruskal)
- Heavy Cargo(弗洛伊德——最小生成树)
- POJ 1797 Heavy Transportation(最小生成树或最短路)
- POJ-1797Heavy Transportation (最小生成树问题)
- UVA 10369 最小生成树
- uva 10397(最小生成树)
- uva 10034(最小生成树)
- 第十二周 项目4 利用遍历思想求解图问题(输出通过一个节点的所有简单回路 )
- 十二周 项目四 利用遍历思想求解图问题(5)
- 第二次随机组队总结
- 项目4(2)
- ToolBar专题
- UVa 11747 Heavy Cycle Edges(最小生成树)
- Java基础——Java重点基础之多态
- NB连续值/决策树理解
- 解决ubuntu上ifconfig没有eth0且无法上网的问题
- AsyncHttpClient 加载图片
- eclipse添加Sever,无可选择的项目
- Android xml资源文件中@、@android:type、@*、?、@+含义和区别
- 封装常用数据库方法及连接(config)
- 动态数组创建