2015 ACM/ICPC Asia Regional Changchun Online

题意:n个池塘,删掉度数小于2的池塘,输出池塘数为奇数的连通块的池塘容量之和.

思路:两个dfs模拟就行了

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <fstream>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <deque>
  7. #include <vector>
  8. #include <queue>
  9. #include <string>
  10. #include <cstring>
  11. #include <map>
  12. #include <stack>
  13. #include <set>
  14. #define LL long long
  15. #define eps 1e-8
  16. #define INF 0x3f3f3f3f
  17. #define MAXN 10005
  18. using namespace std;
  19. vector<int> G[MAXN];
  20. int father[MAXN], cnt[MAXN], du[MAXN];
  21. LL v[MAXN];
  22. bool rm[MAXN], vis[MAXN];
  23. struct Node{
  24. int pos, du;
  25. Node(int pos = , int du = ) :pos(pos), du(du){};
  26. };
  27. bool compare(Node x, Node y){
  28. return x.du < y.du;
  29. }
  30. int find(int x){
  31. if (father[x] == x) return x;
  32. father[x] = find(father[x]);
  33. return father[x];
  34. }
  35. void dfs(int x, int p){
  36. vis[x] = true;
  37. father[x] = p;
  38. for (int i = ; i < G[x].size(); i++){
  39. int y = G[x][i];
  40. if (rm[y] || vis[y]) continue;
  41. dfs(y, p);
  42. }
  43. }
  44. void dfs_rm(int x){
  45. rm[x] = true;
  46. for (int i = ; i < G[x].size(); i++){
  47. du[G[x][i]]--;
  48. if (du[G[x][i]] < && !rm[G[x][i]]) dfs_rm(G[x][i]);
  49. }
  50. }
  51. Node node[MAXN];
  52. int main()
  53. {
  54. //freopen("in.txt", "r", stdin);
  55. int T;
  56. int m, n;
  57. scanf("%d", &T);
  58. while (T--){
  59. scanf("%d%d", &n, &m);
  60. memset(du, , sizeof(du));
  61. for (int i = ; i <= n; i++){
  62. scanf("%I64d", &v[i]);
  63. G[i].clear();
  64. }
  65. int x, y;
  66. for (int i = ; i <= m; i++){
  67. scanf("%d%d", &x, &y);
  68. du[x]++;
  69. du[y]++;
  70. G[x].push_back(y);
  71. G[y].push_back(x);
  72. }
  73. memset(rm, , sizeof(rm));
  74. //sort(node + 1, node + n + 1, compare);
  75. for (int i = ; i <= n; i++){
  76. //int x = node[i].pos;
  77. if (du[i] > || rm[i]) continue;
  78. dfs_rm(i);
  79. }
  80. int p = ;
  81. memset(father, , sizeof(father));
  82. memset(vis, , sizeof(vis));
  83. for (int i = ; i <= n; i++){
  84. if (rm[i] || vis[i]) continue;
  85. dfs(i, p);
  86. p++;
  87. }
  88. memset(cnt, , sizeof(cnt));
  89. for (int i = ; i <= n; i++){
  90. if (rm[i]) continue;
  91. //int x = find(i);
  92. cnt[father[i]]++;
  93. }
  94. LL ans = ;
  95. for (int i = ; i <= n; i++){
  96. if (cnt[father[i]] & ){
  97. ans += v[i];
  98. }
  99. }
  100. printf("%I64d\n", ans);
  101. }
  102. }

HDU 5438 Ponds dfs模拟的更多相关文章

  1. hdu 5438 Ponds dfs

    Time Limit: 1500/1000 MS (Java/Others)     Memory Limit: 131072/131072 K (Java/Others) Problem Descr ...

  2. hdu 5438 Ponds(长春网络赛 拓扑+bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5438 Ponds Time Limit: 1500/1000 MS (Java/Others)     ...

  3. HDU 5438 Ponds (DFS,并查集)

    题意:给定一个图,然后让你把边数为1的结点删除,然后求连通块结点数为奇的权值和. 析:这个题要注意,如果删除一些结点后,又形成了新的边数为1的结点,也应该要删除,这是坑,其他的,先用并查集判一下环,然 ...

  4. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  5. HDU 5438 Ponds

    Ponds Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Sub ...

  6. HDU - 5438 Ponds(拓扑排序删点+并查集判断连通分量)

    题目: 给出一个无向图,将图中度数小于等于1的点删掉,并删掉与他相连的点,直到不能在删为止,然后判断图中的各个连通分量,如果这个连通分量里边的点的个数是奇数,就把这些点的权值求和. 思路: 先用拓扑排 ...

  7. hdu5438 Ponds[DFS,STL vector二维数组]

    目录 题目地址 题干 代码和解释 参考 题目地址 hdu5438 题干 代码和解释 解答本题时参考了一篇代码较短的博客,比较有意思,使用了STL vector二维数组. 可以结合下面的示例代码理解: ...

  8. Vijos P1114 FBI树【DFS模拟,二叉树入门】

    描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种 ...

  9. HDU.5692 Snacks ( DFS序 线段树维护最大值 )

    HDU.5692 Snacks ( DFS序 线段树维护最大值 ) 题意分析 给出一颗树,节点标号为0-n,每个节点有一定权值,并且规定0号为根节点.有两种操作:操作一为询问,给出一个节点x,求从0号 ...

随机推荐

  1. 【codeforces 131E】Yet Another Task with Queens

    [题目链接]:http://codeforces.com/problemset/problem/131/E [题意] 给你n*n坐标上的m个皇后的位置; 然后让你求出,能够攻击到0,1,2-8个其他皇 ...

  2. 尼克的任务 dp 洛谷1280

    蒟蒻表示老久没看过dp题目了,,挺水的一道dp题目都没想出来,,, 首先设dp[i]表示从开始到i时间的最大空闲时间,用vector to[x] 表示从x点开始的任务结束时间,cnt[x]表示从x开始 ...

  3. cin详解(get()、getline()、clear()、sync())

    简述 在C中,输入输出用scanf和printf,在输入数据的同时还需说明数据的类型,如果输入数据较多,那就很麻烦,而C++中也有相似的东西cin和cout,它们来自C++的一个名叫" io ...

  4. Tomcat的安装跟配置

    安装Tomcat的步骤:1)安装好JDK2)把tomcat-7.0.30软件解压到本地硬盘3)设置环境变量:JAVA_HOME: C:\Program Files\Java\jdk1.7.0_04To ...

  5. 【转】webshell检测——使用auditd进行system调用审计

    本文档将介绍:如何通过Linux审计系统auditd监测WebShell执行系统命令的行为. 测试环境:CentOS7.0_x64 auditd简介 Linux审计系统提供了一种跟踪系统上与安全相关的 ...

  6. fullpage中大的图片超过一屏怎么在手机端滑动显示?

    fullpage中大的图片超过一屏怎么在手机端滑动显示?(设置overflow电脑端是会出现滚动条的,但是在手机端不出现滚动条,图片也不可左右滑动显示) var $window = $(window) ...

  7. Webfont 的兼容性问题[持续更新]

    低版安卓手机的 webview 显示不了,另外黑莓手机显示出来是这样: 生成工具: 离线字体生成工具:webfont 在线字体生成平台:icomoon.io, iconfont.cn均有问题 其他一些 ...

  8. 二维码扫描ZXing简化

    最近项目中有需要用到二维码扫描功能,于是查了相关资料,也没有过多地研究ZXing源码,只是有了最简单的功能,因为下载大牛的demo已经完全实现了功能,只是对其中的扫描线做了更改,需要的朋友可以直接使用 ...

  9. jquery重新渲染的问题

    今天动态加载了一个a标记,使他被渲染为linkbutton 在拼该a标记串时,将class属性设置为:class='easyui-linkbutton' ,然而却没有看到linkbutton的效果,原 ...

  10. vue2.0 兄弟组件数据传递方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...