题目大意:给定一棵仙人掌,求有多少自同构仙人掌同构问题= =
曾经出过一个判断两个仙人掌是否同构的题,感觉和这个题很类似首先假设这是一棵树,考虑怎么做我们首先找到树的重心(如果有两个就在中间加一个点变成一个)
然后把树Hash
对于一棵树 如果某一哈希值的子树有kk个 就把答案乘上一个k!k!现在变成了仙人掌,那么我把每个环变成一个红点连向环上的所有点,然后把原先环上的边拆除,可以得到一棵树,...
分类:
编程语言 时间:
2015-07-10 15:16:21
阅读次数:
254
题目链接:点击打开链接
==说同构数有点不对。。反正就是这个意思,对于某个点的所有儿子,先访问标号小的,再访问标号大的。
dp[l][r]表示 区间[l,r] 构成一棵树的方法数。
对于一个区间[l, r] 构成一棵树,则点l一定是根,然后枚举2个区间相乘即可
dp[l][r] = dp[l+1][i] * dp[i+1][r] ( i = [l+1, r] )
当然...
分类:
其他好文 时间:
2015-02-01 14:50:43
阅读次数:
197
题意:
两棵树(10^5个节点) 问其中有多少对子树是同构的
思路:
树的同构一般使用hash来判断
hash函数为1、val=A 2、val = (val*P)^Soni%Q 其中Soni为第i个子树的hash值 3、val=val*B%Q
注意Son值应该排序 (本题因为左右子树是区分开的 因此不用排序)
代码:
#include
#include
#include...
分类:
其他好文 时间:
2015-01-24 13:10:45
阅读次数:
156
题目链接:点击打开链接
给定多叉树的先序遍历结果,求多叉树的同构数
思路:区间dp
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
int min(int a,int b){return a>b?b:a;}
int max(...
分类:
其他好文 时间:
2014-12-24 13:31:30
阅读次数:
136
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3602
题意:给出一棵有n个节点的二叉树和一棵有m个节点的二叉树,给出每个节点的左右子树信息,问这两棵树有几个相同的子树。
思路:树的同构,比赛时没想法,赛后看的别人的解题报告。实际上是给每个节点的左右子树一个哈希值,不用像字符串哈希那么麻烦,直接给每个子树...
分类:
其他好文 时间:
2014-09-05 18:18:31
阅读次数:
251
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4705
题意:给出两棵二叉树A和B,问分别处于A中的子树a和处于B中的子树b结构相同的有多少对。
思路:哈希的想法,不同的数字对应的是不同的结构,比如1代表着单独的叶子结点,2代表着有左子树是叶子结点而没有右子树的子树...每出现一种新的子树情形就记录下来,记录的方式是...
分类:
其他好文 时间:
2014-09-05 18:17:11
阅读次数:
206