HDU 5438 Ponds (DFS,并查集)
题意:给定一个图,然后让你把边数为1的结点删除,然后求连通块结点数为奇的权值和。
析:这个题要注意,如果删除一些结点后,又形成了新的边数为1的结点,也应该要删除,这是坑,其他的,先用并查集判一下环,然后再找连通环。
代码如下:
- #include <cstdio>
- #include <string>
- #include <cstdlib>
- #include <cmath>
- #include <iostream>
- #include <cstring>
- #include <set>
- #include <queue>
- #include <algorithm>
- #include <vector>
- #include <map>
- #include <cctype>
- using namespace std ;
- typedef long long LL;
- typedef pair<int, int> P;
- const int INF = 0x3f3f3f3f;
- const double inf = 0x3f3f3f3f3f3f3f;
- const double eps = 1e-8;
- const int maxn = 1e4 + 5;
- const int dr[] = {0, 0, -1, 1};
- const int dc[] = {-1, 1, 0, 0};
- int n, m;
- inline bool is_in(int r, int c){
- return r >= 0 && r < n && c >= 0 && c < m;
- }
- int p[maxn];
- int a[maxn];
- int Find(int x){ return x == p[x] ? x : p[x] = Find(p[x]); }
- int vis[maxn];
- vector<int> vv;
- vector<int> G[maxn];
- bool dfs(int u, int fa){
- if(vis[u]) return true;
- if(!G[u].size()) return false;
- bool ok = false;
- vis[u] = 1;
- for(int i = 0; i < G[u].size(); ++i){
- int v = G[u][i];
- if(v == fa) continue;
- if(dfs(v, u)) ok = true;
- }
- if(ok) vv.push_back(u);
- return ok;
- }
- int main(){
- int T;
- cin >> T;
- while(T--){
- scanf("%d %d", &n, &m);
- for(int i = 0; i <= n; ++i) p[i] = i;
- for(int i = 1; i <= n; ++i){ scanf("%d", &a[i]); G[i].clear(); }
- memset(vis, 0, sizeof(vis));
- vector<int> v;
- // memset(in, 0, sizeof(in));
- int u, w;
- for(int i = 0; i < m; ++i){
- scanf("%d %d", &u, &w);
- int x = Find(u);
- int y = Find(w);
- G[u].push_back(w);
- G[w].push_back(u);
- // ++in[u];
- // ++in[w];
- if(x != y) p[y] = x;
- else v.push_back(u);
- }
- LL ans = 0;
- sort(v.begin(), v.end());
- for(int i = 0; i < v.size(); ++i){
- if(i && v[i] == v[i-1]) continue;
- vv.clear();
- dfs(v[i], -1);
- if(vv.size() & 1){
- for(int j = 0; j < vv.size(); ++j)
- ans += a[vv[j]], a[vv[j]] = 0;
- }
- }
- cout << ans << endl;
- }
- return 0;
- }
- /*
- 1
- 4 4
- 1 2 3 4
- 1 2
- 1 3
- 2 3
- 1 4
- */
HDU 5438 Ponds (DFS,并查集)的更多相关文章
- hdu 5438 Ponds dfs
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem Descr ...
- HDU 5438 Ponds dfs模拟
2015 ACM/ICPC Asia Regional Changchun Online 题意:n个池塘,删掉度数小于2的池塘,输出池塘数为奇数的连通块的池塘容量之和. 思路:两个dfs模拟就行了 # ...
- hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点)
hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 ...
- HDU 1811 拓扑排序 并查集
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...
- HDU - 5438 Ponds(拓扑排序删点+并查集判断连通分量)
题目: 给出一个无向图,将图中度数小于等于1的点删掉,并删掉与他相连的点,直到不能在删为止,然后判断图中的各个连通分量,如果这个连通分量里边的点的个数是奇数,就把这些点的权值求和. 思路: 先用拓扑排 ...
- hdu 1198 Farm Irrigation(深搜dfs || 并查集)
转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm ...
- HDU 6370 dfs+并查集
Werewolf Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- Hdu 5458 Stability (LCA + 并查集 + 树状数组 + 缩点)
题目链接: Hdu 5458 Stability 题目描述: 给出一个还有环和重边的图G,对图G有两种操作: 1 u v, 删除u与v之间的一天边 (保证这个边一定存在) 2 u v, 查询u到v的路 ...
- HDU 5441 离线处理 + 并查集
题意:给n个节点m条带权值边的无向图.然后q个问题,每次询问点对的数目,点对需要满足的条件是:1)连通:2)其路径的最大权值不能超过询问值. 分析:如果没次询问一次,dfs一次,很可能超时,因此可以用 ...
随机推荐
- jquery 获取和设置 select下拉框的值(转手册)
##实例应用中遇到的问题 //在某事件响应的应用中设置select选中项,前两种情况的设置不生效,使用了最后一种用法才生效的 //$("#select_time").find(&q ...
- erl0010 - erlang查看ets 当前系统使用情况和当前配置上限
1.限制:erlang官网给出了ets的默认上限:“The default is 1400, can be changed with the environment variable ERL_MAX_ ...
- Oracle Exadata体系笔记
Exadata一开始是以一个存储系统形式诞生的,叫做SAGE(Storage Appliance for Grid Environ ments,网格环境存储设备) Exadata原本设计用来解决超 ...
- Amarino例程无法使用的问题
Serial.begin(9600); 而不是用它的57600
- Bootstrap学习之路(3)---列表组件
列表是几乎所有网站都会用到的一个组件,正好bootstrap也给我们提供了这个组件的样式,下面我给大家简单介绍一下bootstrap中的列表组件的用法! 首先,重提一下引用bootstrap的核心文件 ...
- [Everyday Mathematics]20150304
证明: $$\bex \frac{2}{\pi}\int_0^\infty \frac{1-\cos 1\cos \lm-\lm \sin 1\sin \lm}{1-\lm^2}\cos \lm x\ ...
- 书签(Bookmarks)
工作台允许使用者在文件中创建书签,通过这些书签,使用者可以从书签视图里快速打开这些文件,并跳转到相应的行. (1)在编辑器左边灰色的区域里单击鼠标右键,在弹出的菜单里选择“Add Bookmark.. ...
- 前端架构:Angular与requirejs集成实践
这几天angular与requirejs.browserify的集成弄的博主头好晕,今天终于成功集成了requirejs,现写些心得体会在这里. 核心思想:angular加载时有一定的顺序,必须依次加 ...
- Python 时间整理
在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: ...
- 黑马程序员——OC的内存管理学习小结
内存管理在Objective-C中的重要性就像指针在C语言中的重要程序一样. 虽然作为一门高级语言,但OC却没有内存回收机制.这就需要开发者来对动态内存进行管理.OC中内存管理的范围是:任何继承了NS ...