HDU 5438 Ponds dfs模拟
2015 ACM/ICPC Asia Regional Changchun Online
题意:n个池塘,删掉度数小于2的池塘,输出池塘数为奇数的连通块的池塘容量之和.
思路:两个dfs模拟就行了
- #include <iostream>
- #include <cstdio>
- #include <fstream>
- #include <algorithm>
- #include <cmath>
- #include <deque>
- #include <vector>
- #include <queue>
- #include <string>
- #include <cstring>
- #include <map>
- #include <stack>
- #include <set>
- #define LL long long
- #define eps 1e-8
- #define INF 0x3f3f3f3f
- #define MAXN 10005
- using namespace std;
- vector<int> G[MAXN];
- int father[MAXN], cnt[MAXN], du[MAXN];
- LL v[MAXN];
- bool rm[MAXN], vis[MAXN];
- struct Node{
- int pos, du;
- Node(int pos = , int du = ) :pos(pos), du(du){};
- };
- bool compare(Node x, Node y){
- return x.du < y.du;
- }
- int find(int x){
- if (father[x] == x) return x;
- father[x] = find(father[x]);
- return father[x];
- }
- void dfs(int x, int p){
- vis[x] = true;
- father[x] = p;
- for (int i = ; i < G[x].size(); i++){
- int y = G[x][i];
- if (rm[y] || vis[y]) continue;
- dfs(y, p);
- }
- }
- void dfs_rm(int x){
- rm[x] = true;
- for (int i = ; i < G[x].size(); i++){
- du[G[x][i]]--;
- if (du[G[x][i]] < && !rm[G[x][i]]) dfs_rm(G[x][i]);
- }
- }
- Node node[MAXN];
- int main()
- {
- //freopen("in.txt", "r", stdin);
- int T;
- int m, n;
- scanf("%d", &T);
- while (T--){
- scanf("%d%d", &n, &m);
- memset(du, , sizeof(du));
- for (int i = ; i <= n; i++){
- scanf("%I64d", &v[i]);
- G[i].clear();
- }
- int x, y;
- for (int i = ; i <= m; i++){
- scanf("%d%d", &x, &y);
- du[x]++;
- du[y]++;
- G[x].push_back(y);
- G[y].push_back(x);
- }
- memset(rm, , sizeof(rm));
- //sort(node + 1, node + n + 1, compare);
- for (int i = ; i <= n; i++){
- //int x = node[i].pos;
- if (du[i] > || rm[i]) continue;
- dfs_rm(i);
- }
- int p = ;
- memset(father, , sizeof(father));
- memset(vis, , sizeof(vis));
- for (int i = ; i <= n; i++){
- if (rm[i] || vis[i]) continue;
- dfs(i, p);
- p++;
- }
- memset(cnt, , sizeof(cnt));
- for (int i = ; i <= n; i++){
- if (rm[i]) continue;
- //int x = find(i);
- cnt[father[i]]++;
- }
- LL ans = ;
- for (int i = ; i <= n; i++){
- if (cnt[father[i]] & ){
- ans += v[i];
- }
- }
- printf("%I64d\n", ans);
- }
- }
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(长春网络赛 拓扑+bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5438 Ponds Time Limit: 1500/1000 MS (Java/Others) ...
- HDU 5438 Ponds (DFS,并查集)
题意:给定一个图,然后让你把边数为1的结点删除,然后求连通块结点数为奇的权值和. 析:这个题要注意,如果删除一些结点后,又形成了新的边数为1的结点,也应该要删除,这是坑,其他的,先用并查集判一下环,然 ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 5438 Ponds
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- HDU - 5438 Ponds(拓扑排序删点+并查集判断连通分量)
题目: 给出一个无向图,将图中度数小于等于1的点删掉,并删掉与他相连的点,直到不能在删为止,然后判断图中的各个连通分量,如果这个连通分量里边的点的个数是奇数,就把这些点的权值求和. 思路: 先用拓扑排 ...
- hdu5438 Ponds[DFS,STL vector二维数组]
目录 题目地址 题干 代码和解释 参考 题目地址 hdu5438 题干 代码和解释 解答本题时参考了一篇代码较短的博客,比较有意思,使用了STL vector二维数组. 可以结合下面的示例代码理解: ...
- Vijos P1114 FBI树【DFS模拟,二叉树入门】
描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种 ...
- HDU.5692 Snacks ( DFS序 线段树维护最大值 )
HDU.5692 Snacks ( DFS序 线段树维护最大值 ) 题意分析 给出一颗树,节点标号为0-n,每个节点有一定权值,并且规定0号为根节点.有两种操作:操作一为询问,给出一个节点x,求从0号 ...
随机推荐
- 【codeforces 131E】Yet Another Task with Queens
[题目链接]:http://codeforces.com/problemset/problem/131/E [题意] 给你n*n坐标上的m个皇后的位置; 然后让你求出,能够攻击到0,1,2-8个其他皇 ...
- 尼克的任务 dp 洛谷1280
蒟蒻表示老久没看过dp题目了,,挺水的一道dp题目都没想出来,,, 首先设dp[i]表示从开始到i时间的最大空闲时间,用vector to[x] 表示从x点开始的任务结束时间,cnt[x]表示从x开始 ...
- cin详解(get()、getline()、clear()、sync())
简述 在C中,输入输出用scanf和printf,在输入数据的同时还需说明数据的类型,如果输入数据较多,那就很麻烦,而C++中也有相似的东西cin和cout,它们来自C++的一个名叫" io ...
- Tomcat的安装跟配置
安装Tomcat的步骤:1)安装好JDK2)把tomcat-7.0.30软件解压到本地硬盘3)设置环境变量:JAVA_HOME: C:\Program Files\Java\jdk1.7.0_04To ...
- 【转】webshell检测——使用auditd进行system调用审计
本文档将介绍:如何通过Linux审计系统auditd监测WebShell执行系统命令的行为. 测试环境:CentOS7.0_x64 auditd简介 Linux审计系统提供了一种跟踪系统上与安全相关的 ...
- fullpage中大的图片超过一屏怎么在手机端滑动显示?
fullpage中大的图片超过一屏怎么在手机端滑动显示?(设置overflow电脑端是会出现滚动条的,但是在手机端不出现滚动条,图片也不可左右滑动显示) var $window = $(window) ...
- Webfont 的兼容性问题[持续更新]
低版安卓手机的 webview 显示不了,另外黑莓手机显示出来是这样: 生成工具: 离线字体生成工具:webfont 在线字体生成平台:icomoon.io, iconfont.cn均有问题 其他一些 ...
- 二维码扫描ZXing简化
最近项目中有需要用到二维码扫描功能,于是查了相关资料,也没有过多地研究ZXing源码,只是有了最简单的功能,因为下载大牛的demo已经完全实现了功能,只是对其中的扫描线做了更改,需要的朋友可以直接使用 ...
- jquery重新渲染的问题
今天动态加载了一个a标记,使他被渲染为linkbutton 在拼该a标记串时,将class属性设置为:class='easyui-linkbutton' ,然而却没有看到linkbutton的效果,原 ...
- vue2.0 兄弟组件数据传递方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...