【题意】给定仙人掌图,求最大独立集(选择最大的点集使得点间无连边)。n<=50000,m<=60000。

【算法】DFS处理仙人掌图

【题解】参考:【BZOJ】1023: [SHOI2008]cactus仙人掌图

对仙人掌进行无向图的点双连通分量Tarjan算法,树边正常DP,环边(low[y]<=dfn[x])无视。

每个环在其深度最小的点整体处理(找到(u,v)只须fa[v]≠u&&dfn[y]>dfn[x])。

DP的做法参考:【BZOJ】1040: [ZJOI2008]骑士 环套树DP

#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
int read(){
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
const int maxn=;
struct edge{int v,from;}e[maxn*];
int n,m,tot,first[maxn],fa[maxn],f[maxn][],g[maxn][];
int dfn[maxn],low[maxn],dfsnum=;
void insert(int u,int v){tot++;e[tot].v=v;e[tot].from=first[u];first[u]=tot;} void solve(int u,int v){
int cnt=;
for(int i=v;i!=fa[u];i=fa[i]){cnt++;g[cnt][]=f[i][];g[cnt][]=f[i][];}
for(int i=;i<=cnt;i++){
g[i][]+=max(g[i-][],g[i-][]);
g[i][]+=g[i-][];
}
f[u][]=g[cnt][];
cnt=;
for(int i=v;i!=fa[u];i=fa[i]){cnt++;g[cnt][]=f[i][];g[cnt][]=f[i][];}
g[][]=-0x3f3f3f3f;
for(int i=;i<=cnt;i++){
g[i][]+=max(g[i-][],g[i-][]);
g[i][]+=g[i-][];
}
f[u][]=g[cnt][];
}
void tarjan(int x,int father){
dfn[x]=low[x]=++dfsnum;f[x][]=;f[x][]=;
for(int i=first[x];i;i=e[i].from)if(i!=father){
int y=e[i].v;
if(!dfn[y]){
fa[y]=x;
tarjan(y,i);
low[x]=min(low[x],low[y]);
}else low[x]=min(low[x],dfn[y]);
if(low[y]>dfn[x]){
f[x][]+=max(f[y][],f[y][]);
f[x][]+=f[y][];
}
}
for(int i=first[x];i;i=e[i].from)if(fa[e[i].v]!=x&&dfn[e[i].v]>dfn[x])solve(x,e[i].v);
}
int main(){
n=read();m=read();
for(int i=;i<=m;i++){
int u=read(),v=read();
insert(u,v);insert(v,u);
}
tarjan(,);
printf("%d",max(f[][],f[][]));
return ;
}

【BZOJ】4316: 小C的独立集 静态仙人掌的更多相关文章

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

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

  2. BZOJ 4316: 小C的独立集 仙人掌 + 树形DP

    4316: 小C的独立集 Time Limit: 10 Sec  Memory Limit: 128 MB Description 图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨. ...

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

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

  4. BZOJ 4316: 小C的独立集

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

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

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

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

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

  7. 【BZOJ4316】小C的独立集(仙人掌,动态规划)

    [BZOJ4316]小C的独立集(仙人掌,动态规划) 题面 BZOJ 题解 除了普通的动态规划以外,这题还可以用仙人掌的做法来做. 这里没有必要把圆方树给建立出来 \(Tarjan\)的本质其实就是一 ...

  8. BZOJ4316 小C的独立集 【仙人掌】

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

  9. 2019.02.07 bzoj4316: 小C的独立集(仙人掌+树形dp)

    传送门 题意:给出一个仙人掌森林求其最大独立集. 思路:如果没有环可以用经典的树形dpdpdp解决. fi,0/1f_{i,0/1}fi,0/1​表示第iii个点不选/选的最大独立集. 然后fi,0+ ...

随机推荐

  1. 0422 寻找数学口袋精灵BUG

    首先要部署这个app项目就是第一步: 一.前提下载并安装JDK 在线图解:手把手教你安装JDK      http://www.lvtao.net/server/windows-setup-jdk.h ...

  2. selenium 概念及练习 !

    1.selenium中如何判断元素是否存在? 2.selenium中hidden或者是display = none的元素是否可以定位到? 3.selenium中如何保证操作元素的成功率?也就是说如何保 ...

  3. 增加响应header让ajax支持跨域

    ajax请求数据步骤 发送请求--->浏览器接受响应--->判断是否是同域下 是的话,就把响应数据返回给ajax.不是的话就提醒禁止跨域请求. 现在可以在响应头重增加 header(&qu ...

  4. PHP面向对象之接口

    接口(interface)技术 什么是接口? 先看抽象类: abstract  class  类名  { 属性1: 属性2: ..... 非抽象方法1: 非抽象方法2: ...... 抽象方法1: 抽 ...

  5. Java多线程 -yield用法

    前几天复习了一下多线程,发现有许多网上讲的都很抽象,所以,自己把网上的一些案例总结了一下! 一. Thread.yield( )方法: 使当前线程从执行状态(运行状态)变为可执行态(就绪状态).cpu ...

  6. 【vim】vim常用命令

    移动: h 或 向左箭头键(←)  #光标向左移劢一个字符 j 或 下箭头键(↓)    #光标向下移劢一个字符 k 或 向上箭头键(↑)    #光标向上移劢一个字符 l 或 向右箭头键(→)    ...

  7. SQL Server Management Studio(SSMS)的使用与配置整理

    目录 目录 SQL Server Management Studio的使用与配置 1 设置SSMS显示行号 2 添加注释与取消注释的快捷键 3 新建查询的快捷键 4 开启sql语句TIME与IO的统计 ...

  8. caffe框架下目标检测——faster-rcnn实战篇操作

    原有模型 1.下载fasrer-rcnn源代码并安装 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 1) ...

  9. solr服务器的查询过程

    SolrDispatchFilter的作用 This filter looks at the incoming URL maps them to handlers defined in solrcon ...

  10. BZOJ 1066:[SCOI2007]蜥蜴(最大流)

    蜥蜴Description在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到 ...