Description
弗兰德的密室里,机关上方画着两棵树的字样,机关下方是一个有数字的刻度……
弗兰德最高的两棵树,只要知道两棵树的共同的相似度就行了……
给定两棵有根树,可以任意删除两棵树上的节点(删除一棵节点必须保证该节点的子树内的所有节点也必须要被删除,换一种说法,删除后的树必须联通并形成一棵树,且根节点不能被删除),使得删除后的两棵树同构,这两棵树有一个共同大小,即树的size,最大化同构的树的size即为机关的答案……
注:两棵同构的树要满足以下条件:
1、两棵树节点个数相等。
2、两棵树的以根节点的儿子为根子树对应同构。如下图,为两棵同构的有根树。
如下图,为两棵同构的有根树。
Input
一行两个整数n,m分别表示两棵有根树的大小。
以下n-1行描述第一棵树,每行两个数x,y表示x号节点是y号节点父亲。
以下m-1行描述第二棵树,每行两个数x,y表示x号节点是y号节点父亲。
数据保证两棵树的1号节点均为根。
Output
一行一个数,表示两棵树的相似度(删除后最大化的同构树的大小)。
Sample Input
3 3
1 2
1 3
1 2
2 3
Sample Output
2
Data constraint
对于30%的数据,1 ≤ n ≤10
对于60%的数据,1 ≤ n ≤ 100
对于100%的数据,1 ≤ n ≤ 1000数据保证两棵树上每个节点的度均不超过5。
Hint
第一棵树可以保留1号节点和2号节点删除3号节点,也可以保留1号节点与3号节点删除2号节点,
第二棵树保留1号节点和2号节点删除3号节点。
剩下的树同构,树的节点个数均为2。
Solution
首先,我们先观察一下数据,可以发现每一个节点除了根节点以外都最多只有4个儿子,而且 n n n只有1000,所以我们可以考虑一下 O ( n 2 ) O(n^{2}) O(n2)的算法。
设一个 f i , j f_{i,j} fi,j表示把第一棵树以 i i i号节点为根的子树和第二棵树以 j j j号节点为根的子树构成同构所有的最大数量。很容易可以得到 f i , j f_{i,j} fi,j