请教一道关于子树(图)匹配的 OJ 题

2019-12-12 19:43:25 +08:00
 fourstring

题目原文如下:


Description

给定两棵无根树,问第一棵树是否包含第二棵树。

Input Format

此题仅有一个测试点,

多组数据,第一行为一个数表示数据组数。

对于每组数据:

第一行为 N 表示第一棵树的点数

接下来 N-1 行描述第一棵树的边

接下来一行为 M 表示第二棵树的点数

接下来 M-1 行描述第二棵树的边

Output Format

对于每组数据,若第一棵树包含第二棵树则输出 YES 否则输出 NO

Sample Input

2
5
1 2
1 3
3 4
3 5
4
1 4
2 4
3 4
4
1 2
1 3
1 4
4
1 2
2 3
3 4

Sample Output

YES
NO

Hint

n,m<=100 ; 150 组数据


这题和一般子树匹配问题不同的地方在于输入数据的格式,首先输入的树是无根的,实际上相当于一个图的生成树;其次两棵树之间结点的对应关系并没有给定,所以无法通过简单前序+中序遍历比较的方式来确定第一棵树是否包含了第二棵树。

从图的角度来看这似乎是一个子图匹配(Subgraph Matching)问题,查了下 Google 只找到了一些关于子图同构(Subgraph isomorphism)的资料,如 Ullmann 算法和 VF2 算法,但它们都要求两图之间结点的映射是给定的,但事实上对于本题如果能找到这样一个映射关系,剩下的也并不成为问题。

另外我还找到了本题的一份 AC 代码,不过带有明显的 OI 风格,由于我个人没有相关经验所以调试了很久也没理解这段代码的写法,链接如下:

请问是否有大佬指点一下本题的简单思路或者能大致解释一下这段 AC 代码的逻辑?感激不尽!

1075 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/628482

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX