题意:给你两颗有根树,判定是否同构。

用了《Hash在信息学竞赛中的一类应用》中的哈希函数。

len就是某结点的子树大小,g是某结点的孩子数+1。

这个值也是可以动态转移的!具体见论文,所以能高速处理出一颗无根树以每个顶点为根时的哈希值。改日敲个板子试试。

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
typedef unsigned long long ull;
typedef vector<int>::iterator ITER;
vector<int>G[2][3005];
const ull base=3001ll;
ull bs[3005],f[2][3005];
int T,n,n2,fa[3005],fa2[3005],siz[2][3005];
char a[3005],b[3005];
void df1(int op,int U){siz[op][U]=1;for(ITER it=G[op][U].begin();it!=G[op][U].end();++it){df1(op,*it);siz[op][U]+=siz[op][*it];}
}
bool cm0(const int &a,const int &b){return f[0][a]<f[0][b];
}
bool cm1(const int &a,const int &b){return f[1][a]<f[1][b];
}
void dfs(int op,int U){f[op][U]=(ull)(G[op][U].size()+1)*bs[siz[op][U]-1];for(ITER it=G[op][U].begin();it!=G[op][U].end();++it){dfs(op,*it);}if(op==0){sort(G[op][U].begin(),G[op][U].end(),cm0);}else{sort(G[op][U].begin(),G[op][U].end(),cm1);}int now=0;for(ITER it=G[op][U].begin();it!=G[op][U].end();++it){f[op][U]+=f[op][*it]*bs[now];now+=siz[op][*it];}
}
int main(){bs[0]=1;for(int i=1;i<=3000;++i){bs[i]=bs[i-1]*base;}scanf("%d",&T);for(;T;--T){memset(fa,0,sizeof(fa));memset(fa2,0,sizeof(fa2));memset(f,0,sizeof(f));memset(siz,0,sizeof(siz));for(int i=1;i<=n;++i){G[0][i].clear();}for(int i=1;i<=n2;++i){G[1][i].clear();}n=n2=1;scanf("%s%s",a+1,b+1);int len=strlen(a+1);int U=1;for(int i=1;i<=len;++i){if(a[i]=='0'){G[0][U].push_back(++n);fa[n]=U;U=n;}else{U=fa[U];}}U=1;for(int i=1;i<=len;++i){if(b[i]=='0'){G[1][U].push_back(++n2);fa2[n2]=U;U=n2;}else{U=fa2[U];}}if(n!=n2){puts("different");continue;}for(int i=0;i<2;++i){df1(i,1);dfs(i,1);}puts(f[0][1]==f[1][1] ? "same" : "different");}return 0;
}

转载于:https://www.cnblogs.com/autsky-jadek/p/7876711.html

【树哈希】poj1635 Subway tree systems相关推荐

  1. POJ 1635 Subway tree systems 树的Hash 或 树的最小表示法

    题目大意: 就是给出从树的中心开始的dfs序, 根据两个dfs序列判断两棵树是否同构 大致思路: 首先根据dfs一直是从树的中心开始的, 所以不用担心中心的问题, 用树的Hash的话当然可以做 另外一 ...

  2. BZOJ.4337.[BJOI2015]树的同构(树哈希)

    BZOJ 洛谷 \(Description\) 给定\(n\)棵无根树.对每棵树,输出与它同构的树的最小编号. \(n及每棵树的点数\leq 50\). \(Solution\) 对于一棵无根树,它的 ...

  3. 洛谷 - P4323 [JSOI2016]独特的树叶(树上哈希+换根dp)

    题目链接:点击查看 题目大意:给出一棵 n 个节点的树 A ,再给出一棵 n + 1 个节点的树 B,题目保证了树 B 是树 A 添加了一个叶子结点后的一棵树,只不过编号的顺序不同,现在问这个叶子节点 ...

  4. 树的同构模板题(法1.最小表示法+法2.树哈希)

    树的同构 problem solution code solution code problem 模板题 solution Ⅰ. 最小表示法 将树转化为 0/10/10/1 括号序列:从根开始 dfs ...

  5. linux 树状结构图,linux下tree指令的用法, 树状图列出目录, 树状图逐级列出目录...

    tree命令,主要功能是创建文件列表,将所有文件以树的形式列出来 linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装, 安装 sudo apt install tree ...

  6. 洛谷4895 BZOJ3162 独钓寒江雪 树形dp 树哈希

    题目链接 题意: 给定一棵无根树,求其中本质不同的独立集的个数.独立集就是一个集合中的点之间都没有边直接相连.n<=5e5n<=5e5n<=5e5,对1e9+71e9+71e9+7取 ...

  7. 洛谷4895 独钓寒江雪 (树哈希+dp+组合)

    qwq 首先,如果是没有要求本质不同的话,那么还是比较简单的一个树形dp 我们令dp[i][0/1]dp[i][0/1]dp[i][0/1]表示是否iii的子树,是否选iii这个点的方案数. 一个比较 ...

  8. bzoj 3162: 独钓寒江雪 树哈希+树形dp

    题意 给出一棵无标号无根树,问本质不同的最大独立集数量.答案模1e9+7. n<=500000 分析 对于一般的情况,我们可以先找出树的重心作为根,然后进行树形dp.这样做有什么好处呢?通过根的 ...

  9. LeetCode第 57 场力扣夜喵双周赛(差分数组、单调栈) and 第 251 场力扣周赛(状态压缩动规,树的序列化,树哈希,字典树)

    LeetCode第 57 场力扣夜喵双周赛 离knight勋章越来越近,不过水平没有丝毫涨进 1941. 检查是否所有字符出现次数相同 题目描述 给你一个字符串 s ,如果 s 是一个 好 字符串,请 ...

最新文章

  1. css sprites之圆角
  2. tensorflow与keras关系
  3. C语言中,带空格的字符串输入
  4. 计算机导论摘要,[计算机导论复习摘要.doc
  5. 自动化来势汹汹,未来的程序员该何去何从?
  6. java数组子类型_[改善Java代码]数组的真实类型必须是泛型类型的子类型
  7. SAP Cloud for Customer(C4C) HTML mashup的运行时单步调试
  8. Chrome DevTools — Network 1
  9. [js] for in 和 for of 的区别?
  10. 彩色BMP转换成灰度图的原理
  11. hdu4857 拓扑排序
  12. Eclipse安装SVN插件图文详解
  13. python关键字参数顺序_位置参数和关键字参数的求值顺序
  14. 别再说找不到web前端项目练手了,这套最全的前端实战案例请拿去
  15. wbincms v1.5 综合门户管理系统发布 thinkphp3.2.3+amazui-2.5.2
  16. Windows系统桌面快捷方式图标去除小箭头
  17. 大数据与云计算 | 华科软院2020年期末考试试题及答案
  18. sql查询昨天的所有数据
  19. 使用Python获取股票单日成交数据
  20. Goland Unresolved dependency问题解决

热门文章

  1. 解决微信访问 80 端口的限制问题
  2. 编程初学者必备的基础知识
  3. Python+Django+Mysql实现购物商城推荐系统 基于用户、项目的协同过滤推荐购物商城系统 网络购物推荐系统 代码实现 源代码下载
  4. 工作记录 01-02-2018 至 03-16-2018
  5. Wannafly挑战赛26 御坂网络
  6. 【转载】tcpdump的移植和使用方法
  7. 计算机与机械专业 有什么大学排名,2017机械排名211大学排名
  8. gateway和openfeign依赖冲突
  9. 上传图片就能建模?!一个人人可用的在线三维大场景重建云平台
  10. 一种直观理解Galois理论的途径