HDU 5438(并查集 + dfs)
来源:互联网 发布:模块化编程的好处 编辑:程序博客网 时间:2024/05/19 08:25
Ponds
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 3544 Accepted Submission(s): 1055
Problem Description
Betty owns a lot of ponds, some of them are connected with other ponds by pipes, and there will not be more than one pipe between two ponds. Each pond has a value v .
Now Betty wants to remove some ponds because she does not have enough money. But each time when she removes a pond, she can only remove the ponds which are connected with less than two ponds, or the pond will explode.
Note that Betty should keep removing ponds until no more ponds can be removed. After that, please help her calculate the sum of the value for each connected component consisting of a odd number of ponds
Now Betty wants to remove some ponds because she does not have enough money. But each time when she removes a pond, she can only remove the ponds which are connected with less than two ponds, or the pond will explode.
Note that Betty should keep removing ponds until no more ponds can be removed. After that, please help her calculate the sum of the value for each connected component consisting of a odd number of ponds
Input
The first line of input will contain a number T(1≤T≤30) which is the number of test cases.
For each test case, the first line contains two number separated by a blank. One is the numberp(1≤p≤104) which represents the number of ponds she owns, and the other is the number m(1≤m≤105) which represents the number of pipes.
The next line containsp numbers v1,...,vp , where vi(1≤vi≤108) indicating the value of pond i .
Each of the lastm lines contain two numbers a and b , which indicates that pond a and pond b are connected by a pipe.
For each test case, the first line contains two number separated by a blank. One is the number
The next line contains
Each of the last
Output
For each test case, output the sum of the value of all connected components consisting of odd number of ponds after removing all the ponds connected with less than two pipes.
Sample Input
17 71 2 3 4 5 6 71 41 54 52 32 63 62 7
Sample Output
21
Source
2015 ACM/ICPC Asia Regional Changchun Online
Recommend
hujie | We have carefully selected several similar problems for you: 5780 5779 5778 5777 5776
题意就是删除度数小于2的点,输出含有奇数个点的连通分量的权值。用并查集找连通分量,dfs删除度数小于二的点。
#include<cstdio>#include<cstring>#include<vector>#include<set>#include<map>using namespace std;typedef long long ll;map<int, int> c;int a[10010];int p[10010];set<int> g[10010];int find(int x){ return x == p[x] ? x : find(p[x]);}void dfs(int u){ int t = *g[u].begin(); g[u].erase(t); g[t].erase(u); if(g[t].size() == 1) dfs(t);}int main(){ int T; scanf("%d", &T); while(T--){ c.clear(); memset(p, 0, sizeof p); memset(a, 0, sizeof a); int n, m; scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) scanf("%d", &a[i]); for(int i = 1; i <= n; i++) g[i].clear(); for(int i = 1; i <= n; i++) p[i] = i; for(int i = 0; i < m; i++){ int x, y; scanf("%d%d", &x, &y); g[x].insert(y); g[y].insert(x); int xx = find(x); int yy = find(y); if(xx != yy){ p[xx] = yy; } } for(int i = 1; i <= n; i++) if(g[i].size() == 1) dfs(i); // 删除度数等于1的点 for(int i = 1; i <= n; i++) {if(g[i].size() > 1)++c[find(i)];} ll ans = 0; for(int i = 1; i <= n; i++){ if(c[find(i)] % 2 && g[i].size() > 1) ans += a[i]; } printf("%lld\n", ans); }}
1 0
- HDU 5438(并查集 + dfs)
- HDU 5438 Ponds (DFS + 并查集)
- HDU 5438 Ponds 拓扑序+并查集/DFS
- hdu 1181 (搜索BFS,深搜DFS,并查集)
- hdu 1198 Farm Irrigation(深搜dfs || 并查集)
- HDU 1232 畅通工程 (dfs、并查集)
- HDU 1198 Farm Irrigation (dfs / 并查集)
- HDU 1198(并查集;dfs)
- HDU 1147 (平面几何 dfs 并查集)
- 并查集+DFS
- hdu 2874 Connections between cities LCA || dfs+并查集
- 【HDU 1198】Farm Irrigation(dfs+并查集+bfs)
- HDU 5438 Ponds(并查集)
- nyoj99(并查集+欧拉路+dfs)
- uva208Firetruck(并查集 + DFS)
- hdu 5438 并查集
- HDU-1878 欧拉回路(DFS)(并查集)
- HDU 1198 Farm Irrigation (并查集 和 dfs两种实现)
- 不同的经络,不同的线程
- 主线程不允许联网处理,使用handle失败,API23,AS2.1
- FILE
- RxBus使用示例
- Mongodb 查询文档
- HDU 5438(并查集 + dfs)
- ios开发——宏定义实现NSLog不打印设置
- [HDU1301]-Jungle Roads(最小生成树)
- IOS APP因为广告方面被拒解决方案
- Android中ListView与适配器ArrayAdapter,SimpleAdapter,定义BaseAdapter适配器,ListView添加headerView,ListView滚动到最后一项
- 导出页面div中的图
- 美团外卖手机网页版数据加密解析
- js中typeof与instanceof用法
- Android Fragment 真正的完全解析(下)