1008-H专题四
来源:互联网 发布:unity3d星空天空盒 编辑:程序博客网 时间:2024/05/19 23:28
1.题意:给出一个不成环的图,在只能构成一个环的情况下,求出这个环的权值和最大值
2.思路:这是并查集的问题,当边上的两个节点的根节点相同时,会构成环,这时候就要考虑是构成一个环还是构成两个环,如果构成一个环,那么保留,如果是两个环,就舍弃,把整个图遍历之后,最后输出最大值
3.感想:与前面的一个并查集问题相似。
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> using namespace std; const int MAX = 10005; int visit[MAX]; int father[MAX]; struct edge { int s; int e; int len; }a[MAX*15]; int cmp(edge a, edge b) { return a.len>b.len; } int find(int x) { if (x != father[x]) father[x] = find(father[x]); return father[x]; } int main() { int n, m; while (cin>>n>>m&&m+n) { memset(a, 0, sizeof(a)); int ans = 0; for (int i = 0; i <= n; i++) { father[i] = i; visit[i] = 0; } for (int i = 1; i <= m; i++) cin >> a[i].s >> a[i].e >> a[i].len; sort(a + 1, a + m + 1, cmp); for (int i = 1; i <= m; i++) { int fx = find(a[i].s); int fy = find(a[i].e); if (fx == fy) { if (visit[fx] == 1) continue; visit[fx] = 1; } else { if (visit[fx] == 1 && visit[fy] == 1) continue; else if (visit[fx] == 0) father[fx] = fy; else father[fy] = fx; } ans += a[i].len; } printf("%d\n", ans); } return 0; }
0 0
- 1008-H专题四
- 专题四 Problem H
- 专题四1008
- 专题四1008
- 专题四 · 1008
- 杭电专题四1008
- 专题三 Problem H
- 搜索专题 H
- 【背包专题】H
- [kuangbin带你飞]专题四 最短路练习 H POJ 3660
- [kuangbin带你飞]专题四 最短路练习H,I,J
- 3G专题四
- LDAP专题(四)
- 专题四1003
- 专题四1003
- 专题四 · 1001
- 专题四 Problem A
- 专题四 Problem B
- IOS:main.m启动流程
- C/C++中函数参数传递详解
- 如何用电脑收发传真?电脑怎么收传真?电脑怎么发传真?
- Linux 进程
- linux中gcc编译器的链接过程是怎么样的?
- 1008-H专题四
- 程序员应该如何学习英语
- S5PC210的UBOOT移植过程
- How web servers work
- 杂谈社
- java多线程基础(1)-由调度方式引入线程各种运行状态
- 如果不是因为你,还有谁值得
- 用Unity开发Flappy Bird
- swarm-run.sh