参考:https://www.cnblogs.com/clrs97/p/7518696.html

其实和圆方树没什么关系

设f[i][j][k]为i点选/不选,这个环的底选不选

这个底的定义是设u为这个环在dfs中第一个被扫到的点,箭头表示dfs序:

#include<iostream>
#include<cstdio>
using namespace std;
const int N=100005;
int n,m,h[N],cnt,in[N],dfn,fa[N],f[N][2][2],a[2][2],ans;
bool tp[N],bt[N];
struct qwe
{
int ne,to;
}e[N<<1];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].to=v;
h[u]=cnt;
}
void dfs(int u,int fat)
{
in[u]=++dfn;
fa[u]=fat;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fat&&in[e[i].to])
bt[u]=1;
f[u][1][bt[u]]=1;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fat)
{
if(!in[e[i].to])
{
dfs(e[i].to,u);
a[0][0]=a[0][1]=a[1][0]=a[1][1]=0;
for(int j=0;j<2;j++)
for(int k=0;k<2;k++)
for(int p=0;p<2;p++)
if(!j||!p)
for(int q=0;q<2;q++)
if(!tp[e[i].to]||!j||!q)
a[j][k|(q&!tp[e[i].to])]=max(a[j][k|(q&!tp[e[i].to])],f[u][j][k]+f[e[i].to][p][q]);
for(int j=0;j<2;j++)
for(int k=0;k<2;k++)
f[u][j][k]=a[j][k];
}
else if(in[e[i].to]<in[u])
{
int x=u;
while(fa[x]!=e[i].to)
x=fa[x];
tp[x]=1;
}
}
}
int main()
{
n=read(),m=read();
for(int i=1;i<=m;i++)
{
int x=read(),y=read();
add(x,y),add(y,x);
}
for(int i=1;i<=n;i++)
if(!in[i])
{
dfs(i,0);
int nw=0;
for(int j=0;j<2;j++)
for(int k=0;k<2;k++)
nw=max(nw,f[i][j][k]);
ans+=nw;
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. VFP 祺佑三层开发框架快速开发 演示DEMO
  2. http://www.iis.net/downloads/microsoft/url-rewrite
  3. 第二部分 Mongodb增删改查
  4. Oracle 自定义函数Function
  5. C++:用成员初始化列表对数据成员初始化
  6. eclipse快速查找一个变量、方法或者类被引用的地方
  7. EF 如何code first
  8. RegExp类型(正则表达式)
  9. Log4j中配置日志文件相对路径
  10. JavaWeb学习总结(一)——JavaWeb开发入门(转)
  11. POJ 2631 Roads in the North(树的直径)
  12. PAT-L3-球队“食物链”-dfs-状压-set
  13. 浅谈Trie树(字典树)
  14. Centos7安装配置Nginx
  15. GitHub 1W star 成就达成!
  16. 2018年JavaScript现状报告
  17. TL认证和运作经典案例评选
  18. 或许你并不需要jQuery
  19. 17-spring学习-AOP初步实现
  20. 如何修改Django中的日期和时间格式 DateTimeField

热门文章

  1. poj 2828 Buy Tickets 【线段树点更新】
  2. 【软件project】菜鸟俯瞰软件project
  3. 【转载】分布式系统理论基础 - 一致性、2PC和3PC
  4. Java数据结构与算法之排序
  5. 使用 C# 开发智能手机软件:推箱子(四)
  6. javascript参数arguments对象
  7. iOS APP第一次上架遇到的问题
  8. Phoenix(SQL On HBase)安装和使用报告
  9. Linux Linker
  10. css简单的数学运算