【Hash】BZOJ4337(BJOI2015)[树的同构]题解
来源:互联网 发布:cad制图机械软件 编辑:程序博客网 时间:2024/05/18 21:12
题目概述
给出
解题报告
题目骗人QAQ,明明是无根树,还搞个根节点。怎么判断同构?Hash大法好!
比较好的Hash方法是给每个儿子都对应一个素数(可以提前打表搞出
示例程序
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef unsigned long long ULL;const int maxn=50,maxm=50,Base=23333;const int p[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229};int m,ro,n[maxm+5];ULL ha[maxm+5][maxn+5];int E,lnk[maxn*2+5],nxt[maxn*2+5],son[maxn*2+5];inline void Add(int x,int y) {son[++E]=y;nxt[E]=lnk[x];lnk[x]=E;}ULL Dfs(int x,int fa=0){ int tot=0;ULL now[maxn+5],v=Base; for (int j=lnk[x];j;j=nxt[j]) if (son[j]!=fa) now[tot++]=Dfs(son[j],x); sort(now,now+tot);for (int i=0;i<tot;i++) v=v*Base+now[i]*p[i];return v;}int main(){ freopen("program.in","r",stdin); freopen("program.out","w",stdout); scanf("%d",&m); for (int i=1;i<=m;i++) { scanf("%d",&n[i]);E=0;memset(lnk,0,sizeof(lnk)); for (int j=1,x;j<=n[i];j++) {scanf("%d",&x);if (x) Add(x,j),Add(j,x);} for (int j=1;j<=n[i];j++) ha[i][j]=Dfs(j);sort(ha[i]+1,ha[i]+1+n[i]); for (int j=1,k;j<=i;j++) if (n[i]==n[j]) { for (k=1;k<=n[i];k++) if (ha[i][k]!=ha[j][k]) break; if (k>n[i]) {printf("%d\n",j);break;} } } return 0;}
阅读全文
0 0
- 【Hash】BZOJ4337(BJOI2015)[树的同构]题解
- BZOJ4337(BJOI2015)[树的同构]--树Hash
- bzoj4337: BJOI2015 树的同构 树hash
- 【bzoj4337】【BJOI2015】【树的同构】【hash】
- 【Hash】bzoj4337 BJOI2015树的同构
- BZOJ4337: [BJOI2015] 树的同构(Hash)
- 【BJOI2015】【BZOJ4337】树的同构
- bzoj4337 BJOI2015 树的同构
- [BZOJ4337 BJOI2015 树的同构]树哈希
- 【树哈希】BZOJ4337 BJOI2015 树的同构
- 2017.10.6 BJOI2015 bzoj4337 树的同构
- bzoj4337树的同构(树hash)
- BZOJ 4337 BJOI2015 树的同构 Hash
- BZOJ 4337: BJOI2015 树的同构|Hash
- bzoj 4337: BJOI2015 树的同构 (树hash)
- [树hash]BZOJ 4337——BJOI2015 树的同构
- 【BZOJ】4337 BJOI2015 树的同构 树hash
- 4337: BJOI2015 树的同构
- java之Apache POI 合并单元格
- table access by index rowid
- python的正则使用
- openssh-server
- Android中.9图片的含义及制作教程
- 【Hash】BZOJ4337(BJOI2015)[树的同构]题解
- PMP认证申请流程
- 系统日志
- Pocscan搭建指南(转)
- 【codevs 2913】建筑抢修
- python dict to dataframe
- 让Excel也能同时显示多个文件像word一样
- https://jira.mariadb.org/browse/CONJ-480?focusedCommentId=96043&page=com.atlassian.jira.plugin.syste
- 用周易算出逃课学生 老师回应:只是课程预演