bzoj4316: 小C的独立集
Description
Input
Output
#include<cstdio>
const int N=,R=;
char buf[R+],*ptr=buf-;
int n,m,ans=;
int et[],enx[],e0[N],ep=;
int ed[N],stk[N],stp=,bm[N],tp[N],dep[N];
int f0[N],f1[N],g0[N],g1[N];
inline int _int(){
int x=,c=*++ptr;
while(c<)c=*++ptr;
while(c>)x=x*+c-,c=*++ptr;
return x;
}
inline void maxs(int&a,int b){if(a<b)a=b;}
bool rt[N];
void dfs1(int w){
ed[w]=;
stk[++stp]=w;
for(int i=e0[w],u;i;i=enx[i])if(u=et[i]){
if(!ed[u]){
et[i^]=;
dep[u]=dep[w]+;
dfs1(u);
}else{
et[i]=et[i^]=;
while(dep[stk[stp]]>dep[u]){
int x=stk[stp--];
bm[x]=w;tp[x]=u;
}
}
}
if(stk[stp]==w)--stp;
}
void dfs2(int w){
f1[w]=;
if(w!=bm[w])g1[w]=;
for(int i=e0[w],u;i;i=enx[i])if(u=et[i]){
dfs2(u);
if(bm[u]!=bm[w]){
if(tp[u]!=w)g0[w]+=f1[u],g1[w]+=f0[u];
else g0[w]+=f1[u],g1[w]+=g0[u];
}else g0[w]+=g1[u],g1[w]+=g0[u];
if(tp[u]!=w)f0[w]+=f1[u],f1[w]+=f0[u];
else f0[w]+=f1[u],f1[w]+=g0[u];
}
maxs(f1[w],f0[w]);
maxs(g1[w],g0[w]);
}
int main(){
fread(buf,,R,stdin);
n=_int();m=_int();
while(m--){
int a=_int(),b=_int();
et[ep]=b;enx[ep]=e0[a];e0[a]=ep++;
et[ep]=a;enx[ep]=e0[b];e0[b]=ep++;
}
dfs1();dfs2();
printf("%d\n",f1[]);
return ;
}
bzoj4316: 小C的独立集的更多相关文章
- [BZOJ4316]小C的独立集(圆方树DP)
题意:求仙人掌图直径. 算法:建出仙人掌圆方树,对于圆点直接做普通的树上DP(忽略方点儿子),方点做环上DP并将值直接赋给父亲. 建图时有一个很好的性质,就是一个方点在邻接表里的点的顺序正好就是从环的 ...
- BZOJ4316 小C的独立集 【仙人掌】
题目 图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨. 这不,小C让小D去求一个无向图的最大独立集,通俗地讲就是:在无向图中选出若干个点,这些点互相没有边连接,并使取出的点尽量多. ...
- 2019.02.07 bzoj4316: 小C的独立集(仙人掌+树形dp)
传送门 题意:给出一个仙人掌森林求其最大独立集. 思路:如果没有环可以用经典的树形dpdpdp解决. fi,0/1f_{i,0/1}fi,0/1表示第iii个点不选/选的最大独立集. 然后fi,0+ ...
- 【题解】Bzoj4316小C的独立集
决定要开始学习圆方树 & 仙人掌相关姿势.加油~~ 其实感觉仙人掌本质上还是一棵树,长得也还挺优美的.很多的想法都可以往树的方面上靠,再针对仙人掌的特性做出改进.这题首先如果是在树上的话那么实 ...
- [BZOJ4316]小C的独立集 仙人掌?
题目链接 因为xls让我每周模拟一次,然后学习模拟中没有学过的东西.所以就来学圆方树. 本来这道题用不着圆方树,但是圆方树是看yyb的博客学的,他在里面讲一下作为一个引子,所以也来写一下. 首先来Ta ...
- bzoj4316小C的独立集(dfs树/仙人掌+DP)
本题有两种写法,dfs树上DP和仙人掌DP. 先考虑dfs树DP. 什么是dfs树?其实是对于一棵仙人掌,dfs后形成生成树,找出非树边(即返祖边),然后dfs后每条返祖边+其所覆盖的链构成了一个环( ...
- 【BZOJ4316】小C的独立集(动态规划)
[BZOJ4316]小C的独立集(动态规划) 题面 BZOJ 题解 考虑树的独立集求法 设\(f[i][0/1]\)表示\(i\)这个点一定不选,以及\(i\)这个点无所谓的最大值 转移\(f[u][ ...
- 【BZOJ4316】小C的独立集(仙人掌,动态规划)
[BZOJ4316]小C的独立集(仙人掌,动态规划) 题面 BZOJ 题解 除了普通的动态规划以外,这题还可以用仙人掌的做法来做. 这里没有必要把圆方树给建立出来 \(Tarjan\)的本质其实就是一 ...
- 【BZOJ-4316】小C的独立集 仙人掌DP + 最大独立集
4316: 小C的独立集 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 57 Solved: 41[Submit][Status][Discuss] ...
随机推荐
- maven为不同环境打包(hibernate)-超越昨天的自己系列(6)
超越昨天的自己系列(6) 使用ibatis开发中,耗在dao层的开发时间,调试时间,差错时间,以及适应修改需求的时间太长,导致项目看起来就添删改查,却特别费力. 在项目性能要求不高的情况下,开始寻 ...
- davlik虚拟机内存管理之一——内存分配
转载自http://www.miui.com/thread-74715-1-1.html dalvik虚拟机是Google在Android平台上的Java虚拟机的实现,内存管理是dalvik虚拟机中的 ...
- C# 接受邮件 两种方式
有些累了,不想写太多,直接把代码贴上 EWS 源码 POP协议 源码 PS:如果我们发现引入的一个dll,能够添加引用,但是一编译又找不到,那么很有可能是.net framework 版本不同. 不如 ...
- C#使用指针的2个主要原因
一下内容来自于书籍:<C#高级编程(第六版)> C#使用指针的2个主要原因:
- 【渗透测试学习平台】 web for pentester -2.SQL注入
Example 1 字符类型的注入,无过滤 http://192.168.91.139/sqli/example1.php?name=root http://192.168.91.139/sqli/e ...
- 颜色追踪块CamShift---33
原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 颜色追踪块CamShift滤波器. 首先确保你的kinect驱动或者uvc相机驱动能正常启动:(如果你使 ...
- POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)
POJ 2251 题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径,移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层 ...
- phpwind数据同步本地之后板块排版乱
排版紊乱的问题一般是css文件的问题 解决思路 1.打开chrome调用F12,查看是不是css文件没有获取. 2.如果没有获取到的话检查css文件的路径. 在本例中phpwind数据同步到本地之后, ...
- PHP太怪了,in_array() ,strpos,
PHP中在某个字符中查找另外一个字符串,是否存在,用的是strpos,此函数用法,经常很多人用反了,正确的用法是strpos(string,search),strstr等,前面是原字符串,后面是要在原 ...
- POJ-3162 Walking Race (求树上两点之间最大距离)
题目大意:给一棵树,对于所有的点,找出距它最远点的距离,然后将这些距离排成一列,找出最长的一个区间满足:其中的最大值减去最小值不大于m. 题目分析:两次dfs找出距每个节点的最远距离,然后可以通过维护 ...