4316: 小C的独立集

Time Limit: 10 Sec  Memory Limit: 128 MB

Description

图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨。
这不,小C让小D去求一个无向图的最大独立集,通俗地讲就是:在无向图中选出若干个点,这些点互相没有边连接,并使取出的点尽量多。
小D虽然图论很弱,但是也知道无向图最大独立集是npc,但是小C很仁慈的给了一个很有特点的图: 图中任何一条边属于且仅属于一个简单环,图中没有重边和自环。小C说这样就会比较水了。
小D觉得这个题目很有趣,就交给你了,相信你一定可以解出来的。

Input

第一行,两个数n, m,表示图的点数和边数。
第二~m+1行,每行两个数x,y,表示x与y之间有一条无向边。

Output

输出这个图的最大独立集。

Sample Input

5 6
1 2
2 3
3 1
3 4
4 5
3 5

Sample Output

2

HINT

100% n <=50000, m<=60000
 

Source

题解:

   这个图是仙人掌图啊

  对于一个环就直接 另外 DP就好了

  环与环相邻,逐个求解不受影响啊

  设定dp[i][0/1] 表示当前i为根节点的且选与不选的状态下 其子树 的 最大可选节点数

  1. #include <bits/stdc++.h>
  2. inline long long read(){long long x=,f=;char ch=getchar();while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}return x*f;}
  3. using namespace std;
  4. #define ls i<<1
  5. #define rs ls | 1
  6. #define mid ((ll+rr)>>1)
  7. #define MP make_pair
  8. typedef long long LL;
  9. typedef unsigned long long ULL;
  10. const long long INF = 1e18+1LL;
  11. const double pi = acos(-1.0);
  12. const int N = 2e5 + , M = , inf = 1e9;
  13.  
  14. vector<int > G[N];
  15. int dp[N][],n,m,fa[N];
  16. int dep[N];
  17.  
  18. void gao(int x,int y) {
  19. //cout<<x<<" " <<y<<endl;
  20. int last0 = , last1 = ;
  21. for(int i = x; i != y; i = fa[i]) {
  22. int tmp = last0;
  23. last0 = max(last0,last1) + dp[i][];
  24. last1 = tmp + dp[i][];
  25. }
  26. dp[y][] += max(last1,last0);
  27.  
  28. // int fuck = max(last0,last1);
  29. last0 = -inf, last1 = ;
  30. for(int i = x; i != y; i = fa[i]) {
  31. int tmp = last0;
  32. last0 = max(last0,last1) + dp[i][];
  33. last1 = tmp + dp[i][];
  34. }
  35.  
  36. // fuck = max(max(last0,last1),fuck);
  37.  
  38. //dp[y][0] += fuck;
  39. dp[y][] += last0;
  40. }
  41.  
  42. void dfs(int u,int f) {
  43. dep[u] = dep[f] + ;
  44. fa[u] = f;
  45. dp[u][] = ;
  46. // cout<<u<<" "<<f<<endl;
  47. for(int i = ; i < G[u].size(); ++i) {
  48. int to = G[u][i];
  49. if(to == f) continue;
  50. if(!dep[to]) {dfs(to,u);}
  51. }
  52. for(int i = ; i < G[u].size(); ++i) {
  53. int to = G[u][i];
  54. if(to == f) continue;
  55. if(dep[to] > dep[u] && fa[to] != u) {///montherfuck
  56. gao(to,u);
  57. }
  58. }
  59. }
  60.  
  61. int main() {
  62. scanf("%d%d",&n,&m);
  63. for(int i = ; i <= m; ++i) {
  64. int u,v;
  65. scanf("%d%d",&u,&v);
  66. G[u].push_back(v);
  67. G[v].push_back(u);
  68. }
  69. dfs(,);
  70. printf("%d\n",max(dp[][],dp[][]));
  71. return ;
  72. }
  73. /*
  74. 17 20
  75. 1 2
  76. 2 3
  77. 3 4
  78. 4 5
  79. 5 2
  80. 2 6
  81. 6 7
  82. 7 8
  83. 8 9
  84. 9 10
  85. 10 11
  86. 11 12
  87. 12 6
  88. 6 13
  89. 13 14
  90. 14 15
  91. 15 16
  92. 16 17
  93. 17 13
  94. 13 1
  95. */

BZOJ 4316: 小C的独立集 仙人掌 + 树形DP的更多相关文章

  1. BZOJ.4316.小C的独立集(仙人掌 DP)

    题目链接 \(Description\) 求一棵仙人掌的最大独立集. \(Solution\) 如果是树,那么 \(f[i][0/1]\) 表示当前点不取/取的最大独立集大小,直接DP即可,即 \(f ...

  2. BZOJ 4316: 小C的独立集 解题报告

    4316: 小C的独立集 Description 图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨. 这不,小C让小D去求一个无向图的最大独立集,通俗地讲就是:在无向图中选出若干个点, ...

  3. BZOJ 4316: 小C的独立集

    4316: 小C的独立集 思路:先将树上的转移做好.然后环上的转移就是强制最上面的的点选或者不选,然后在环上跑一遍转移就可以了. 代码: #pragma GCC optimize(2) #pragma ...

  4. bzoj 4316: 小C的独立集【仙人掌dp】

    参考:https://www.cnblogs.com/clrs97/p/7518696.html 其实和圆方树没什么关系 设f[i][j][k]为i点选/不选,这个环的底选不选 这个底的定义是设u为这 ...

  5. 【刷题】BZOJ 4316 小C的独立集

    Description 图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨. 这不,小C让小D去求一个无向图的最大独立集,通俗地讲就是:在无向图中选出若干个点,这些点互相没有边连接,并使 ...

  6. bzoj 4711 小奇挖矿 ——“承诺”类树形dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4711 对“承诺”有了更深的了解. 向外和向内要区分,所以 f [ i ][ j ] 表示根向 ...

  7. 【BZOJ-4316】小C的独立集 仙人掌DP + 最大独立集

    4316: 小C的独立集 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 57  Solved: 41[Submit][Status][Discuss] ...

  8. BZOJ.4199.[NOI2015]品酒大会(后缀自动机 树形DP)

    BZOJ 洛谷 后缀数组做法. 洛谷上SAM比SA慢...BZOJ SAM却能快近一倍... 只考虑求极长相同子串,即所有后缀之间的LCP. 而后缀的LCP在后缀树的LCA处.同差异这道题,在每个点处 ...

  9. [BZOJ 1907] 树的路径覆盖 【树形DP】

    题目链接:BZOJ - 1907 题目分析 使用树形 DP,f[x][0] 表示以 x 为根的子树不能与 x 的父亲连接的最小路径数(即 x 是一个折线的拐点). f[x][1] 表示以 x 为根的子 ...

随机推荐

  1. POJ1167 The Buses

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6234   Accepted: 1698 Description A man ...

  2. JavaScript基础深入之----参数传递的分析与总结

    JS的数值类型是分为两类:基本数据类型和引用数据类型. 基本类型占据的内存栈空间,引用类型被保存在堆空间.引用类型赋值的变量也是被保存在栈空间的,它的作用类似于电视遥控器,负责操作堆空间内指向的对象. ...

  3. 04深入理解C指针之---指针优缺点

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针的优点: 1.支持动态内存分配,主要借助于malloc()函数完成内存的分配,fr ...

  4. hdu 1180(广搜好题)

    诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Subm ...

  5. DOM节点太多导致页面卡顿的优化方法

    http://developer.51cto.com/art/201504/473422.htm

  6. JS-日历签到

    实现的功能: 首先这是前端显示的内容,没有后台的配置哈: 1.显示当前年月下的日历表: 2.今天的日期独有背景色: 3.当月今天之前的日子号数颜色变浅,表示日期已过: 4.点击日期签到:(只能点击当天 ...

  7. DTrace Oracle Database

    http://d.hatena.ne.jp/yohei-a/20100515/1273954199 DTrace で Oracle Database のサーバー・プロセスをトレースしてみた Oracl ...

  8. jmeter源码编译

    转载:http://blog.csdn.net/wanglha/article/details/42004943 一.下载源码 git clone git://github.com/apache/jm ...

  9. html嵌套规则

    本人半路出家的  今天学习js的时候写了一个a嵌套a标签结果js报错 一直找不到原因 专门找了一下html嵌套规则看了一下 1.块级元素 一般用来搭建网站架构.布局.承载内容……它包括以下这些标签: ...

  10. CrtmpServr 接收Http流程

    最近在研究CrtmpServer http部分,记录一些基本的流程,以备查阅. 首先,打开配置脚本CrtmpServer.lua ,确认脚本中有以下内容,如果没有需要加上. { name=" ...