基环树
作者:互联网
基环树的题一般比较明显(好吧,有的与有的也不太明显),有且仅有一个环,一般体现在条件给出 \(n\) 个点 \(n\) 条边
如果是无向图,直接打标机进行 \(dfs\) 即可找到环,个人喜欢开个栈记录当前点,然后找到打过标记的点直接弹栈知道栈内的这个点,于是环就被拎出来了。
如果是有向图,内向树与外向树就有区别了,那么一般喜欢找环时内向建边,进行 \(dp\) 时外向建边
基环树上的 \(dp\) 一般先枚举断边,然后转化成树再进行 \(dp\)
一些题必须要枚举所有断边,然而有些题只需要断一个或两个即可
另外的套路是先 \(dp\) 出所有挂在环上的树的信息,然后在环上进行线性 \(dp\) 或其他数据结构进行操作
这个题中关键信息一个点度数为 \(2\),提示要边点互换,然后发现边数点数相等,直接基环树即可
这道题显然只需要拆一条边,然后强制选一个端点,或另一个端点选,两个都选的方案已经包含其中了
然而这题就没有那么幸运,得 \(dp\) 三次,分别为强制一个选,另一个不选;一个不选,另一个选;都不选
一定注意是强制!!!
可以根据深度开一棵树状数组,然后对于环上差分处理
经过转化,因为要 \(n\) 个公主和 \(n\) 个王子匹配,那么相当于最小生成基环树
并查集额外维护当前连通块内有没有环即可
标签:环上,不选,然后,基环树,即可,dp 来源: https://www.cnblogs.com/yang-cx/p/15553395.html