很久之前想写这题。结果还是把握不住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]=;int e=head[u]; ) { int v=vet[e]; )/]&&flag[v]==) { work(v); odd[u]+=odd[v];even[u]+=even[v]; road[(e+)/].o=odd[v];road[(e+)/].e=even[v]; } e=next[e]; } }
work