DeerInZooDivOne
作者:叶珈宁
关键词:DP 树同构 二分图最大权匹配 KM算法
题目简述
给定一棵n个节点的树,要求找出两个最大的没有公共点的同构连通块。求这两个连通块的大小。
两个连通块A,B同构是指存在一组A的点编号集合到B的点编号集合的双射p,使得如果A中的点u,v之间有一条边,那么B中的点p(u),p(v)之间也有一条边。
n≤51.
算法
假设现在有两棵有根树T1,T2,u,v分别是T1,T2的根,设f(u,v)表示最大的同构连通块大小使得u,v是这两个连通块中的对应点(即p(u)=v)。那么如何才能求得f(u,v)?
设son(x)表示x的儿子集合,那么如果对所有a∈son(u),b∈son(v)都求出了f(a,b),就可以构造一个二分图,左边的点集是son(u),右边的点集是son(v),a,b之间的边权是f(a,b),则f(u,v)就是这个二分图的最大权匹配+1。
那么回到原问题,把树变成有根树,对于答案的两个连通块,至少有一个连通块的根的子树里没有另一个连通块的点。枚举这个点作为u,把u和u父亲之间的边断开,再枚举它父亲所在的连通块内的一个点作为v,计算f(u,v)即可。
状态数是O(n3)的,KM转移的复杂度是O(n3)的,所以总复杂度是O(n6)的。