树上差分.
二分图定义是能用黑白两种颜色给图染色,使得没有两个有边相连的节点颜色相同.其实也就是说图中不存在奇环.
那么一张二分图,删去任意一条边后一定仍是二分图.于是我们先做出原图的一棵生成树,再将剩下的边加入.
预处理 $LCA,dep$ ,然后加入非树边 $(u,v)$ .那么树上 $u\to v$ 路径上所有边都被这条非树边”覆盖”了.
若 $dis(u,v)$ 为奇,加入 $(u,v)$ 后会形成偶环,称这样的边为合法的边.
若 $dis(u,v)$ 为偶,则加入 $(u,v)$ 后会形成奇环,称这样的边为不合法的边.
记不合法的边总数为 $tot$ ,若 $tot=0$ ,可以删的边就是所有的边.
若 $tot=1$ ,可以删的边就是唯一的那条不合法边,以及树上被它覆盖,但未被合法边覆盖的边.
若 $tot>1$ ,可以删的边就是树上被所有不合法边覆盖,但未被任意一条合法边覆盖的边.
删去树边时要求未被合法边覆盖,是因为 $(u,v)$ 若被合法边覆盖,删去后 $u$ 可以走奇数步走到 $v$ ,图中仍存在奇环.
判断使用树上差分,被不合法边覆盖 $+1$ ,被合法边覆盖 $-1$ .
图可能有重边,自环,判起来比较麻烦.还可能不连通,需要每个联通块分别做上述步骤.
没有判重边/自环的代码
1 |
|