码迷,mamicode.com
首页 > 其他好文 > 详细

[bzoj4424]Fairy

时间:2016-04-14 22:21:04      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:

很久之前想写这题。结果还是把握不住CF的E,太神了啊。。。。。。。

首先考虑的是二分图的性质,这个so easy,图中不存在奇数环。

然后分三种情况考虑:

1.只有一个奇数环,随便删除哪条

2.多个奇数环,删除它们都覆盖的那条

3.没有奇数环,岂不是爽爆了。。?

然后还引入了“返祖边”的概念,这个具体可以看博客http://blog.csdn.net/DaD3zZ/article/details/50879626  太神了反正我一点都不会

其中详细叙述了删哪条,怎么删的问题,类似于一个前缀和的思想,给每一条返祖边都打上一个标记。

1.如果它是返祖边,并且在唯一的一个奇环上,那么可以删

2如果它是树上奇环边,并且被所有奇环覆盖,并且不被偶环覆盖,那么也可以删

个人感觉最重要的还是dp的过程:odd[i]表示i的父边奇环,even表示偶环

技术分享
void work(int u)
{
  flag[u]=1;int e=head[u];
  while(e>0)
  {
    int v=vet[e];
    if(ont[(e+1)/2]&&flag[v]==0)
    {
      work(v);
      odd[u]+=odd[v];even[u]+=even[v];
      road[(e+1)/2].o=odd[v];road[(e+1)/2].e=even[v];
    }
    e=next[e];
  }
}
work

 

[bzoj4424]Fairy

标签:

原文地址:http://www.cnblogs.com/wxxlouisa/p/5392706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!