P5043【模板】树同构([BJOI2015]树的同构)
思路:树哈希
提交:1次
题解:
怕不是用的oi-wiki上的公式:
\]
#include<bits/stdc++.h>
#define R register int
using namespace std;
namespace Luitaryi {
template<class I> inline I g(I& x) { x=0; register I f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*=f;
}
#define u32 unsigned int
const int N=60,Inf=1e+9;
const u32 B=23333u;
int T,n[N],cnt,sum;
int vr[N<<1],nxt[N<<1],fir[N];
inline void add(int u,int v) {
vr[++cnt]=v,nxt[cnt]=fir[u],fir[u]=cnt;
vr[++cnt]=u,nxt[cnt]=fir[v],fir[v]=cnt;
}
int sz[N],mx[N];
u32 hsh[N],buf[N],vl[N][2];
inline void calc(int u,int fa) {
sz[u]=1; for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(v==fa) continue; calc(v,u),sz[u]+=sz[v];
} R size=0;
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(v==fa) continue; buf[++size]=hsh[v];
} sort(buf+1,buf+size+1);
u32 vl=0; for(R i=1;i<=size;++i) vl=vl*B+buf[i];
hsh[u]=vl?vl*sz[u]:1;
}
inline void getsz(int u,int fa) {
sz[u]=1,mx[u]=0;
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(v==fa) continue; getsz(v,u); sz[u]+=sz[v];
mx[u]=max(mx[u],sz[v]);
} mx[u]=max(mx[u],sum-sz[u]);
}
inline void main() {
g(T); for(R i=1;i<=T;++i) {
sum=g(n[i]); for(R u=1,v;u<=n[i];++u) g(v),v?add(u,v):(void)0;
getsz(1,0); R sz=Inf,tot=0;
for(R u=1;u<=n[i];++u) sz=min(sz,mx[u]);
for(R u=1;u<=n[i];++u) if(mx[u]==sz) calc(u,0),vl[i][tot]=hsh[u],++tot;
if(tot==2&&vl[i][0]>vl[i][1]) swap(vl[i][0],vl[i][1]);
cnt=0,memset(fir,0,sizeof(fir)),memset(nxt,0,sizeof(nxt)),memset(hsh,0,sizeof(hsh));
}
for(R i=1;i<=T;++i) { register bool flg=true;
for(R j=1;j<i;++j) if(n[i]==n[j]&&vl[i][0]==vl[j][0]&&vl[i][1]==vl[j][1]) {
flg=false; printf("%d\n",j); break;
} if(flg) printf("%d\n",i);
}
}
} signed main() {Luitaryi::main(); return 0;}
2019.09.03
66
P5043【模板】树同构([BJOI2015]树的同构)的更多相关文章
- BZOJ 4337: BJOI2015 树的同构 树hash
4337: BJOI2015 树的同构 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4337 Description 树是一种很常见的数 ...
- bzoj4337: BJOI2015 树的同构 树哈希判同构
题目链接 bzoj4337: BJOI2015 树的同构 题解 树哈希的一种方法 对于每各节点的哈希值为hash[x] = hash[sonk[x]] * p[k]; p为素数表 代码 #includ ...
- 【BZOJ4337】BJOI2015 树的同构 括号序列
[BZOJ4337]BJOI2015 树的同构 Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱 ...
- [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
4337: BJOI2015 树的同构 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1023 Solved: 436[Submit][Status ...
- BZOJ.4337.[BJOI2015]树的同构(树哈希)
BZOJ 洛谷 \(Description\) 给定\(n\)棵无根树.对每棵树,输出与它同构的树的最小编号. \(n及每棵树的点数\leq 50\). \(Solution\) 对于一棵无根树,它的 ...
- BZOJ4337:[BJOI2015]树的同构(树hash)
Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树. 对于两个树T1和T2,如 ...
- BZOJ4337:[BJOI2015]树的同构——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4337 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根, ...
- POJ1635 Subway tree systems ——(判断树的同构,树的最小表示法)
给两棵有根树,判断是否同构.因为同构的树的最小表示法唯一,那么用最小表示法表示这两棵树,即可判断同构.顺便如果是无根树的话可以通过选出重心以后套用之前的方法. AC代码如下: #include < ...
- 【BZOJ4337】树的同构(树同构,哈希)
题意: 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树. 对于两个树T1和T2,如果能够把树T1T ...
- 洛谷 P3377 【模板】左偏树(可并堆)
洛谷 P3377 [模板]左偏树(可并堆) 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或 ...
随机推荐
- wordpress 后台添加 快速编辑 栏目
前两篇其实是同一篇,都是讲在后台添加菜单类型的http://www.ashuwp.com/courses/highgrade/664.htmlhttps://shibashake.com/wordpr ...
- python学习-46 时间模块
时间模块 ····时间戳 print(time.time()) 运行结果: 1564294158.0389376 Process finished with exit code 0 ·····结构化时 ...
- List 集合的常用方法总结
@org.junit.Test public void testListToCompare() { List<String> list1 = new ArrayList<>() ...
- Docker相关环境全套安装文档兼小技能
Docker相关环境全套安装文档兼小技能 以下环境皆为ubuntu16.04,主要安装docker,docker-compose,docker仓库等. Docker安装 参考官方 A: 有源安装 Ub ...
- Spring基础篇——DI/IOC和AOP原理初识
DI(Dependency Injection),依赖注入,和我们常听说的另一个概念 IOC(控制反转)其实归根结底实现的功能是相同的,只是同样的功能站在不同的角度来阐述罢了.这里博主就不去过多的辨析 ...
- 日志(log4j2)
日志测试java代码如下: package com.learn.test; import org.apache.logging.log4j.LogManager; import org.apache. ...
- ASP.NET Core 入门(1)(搭建环境CentOS)
一.CentOS 7 安装 下载CentOS http://isoredirect.centos.org/centos/7/isos/x86_64/ 选择其中下载即可. 下载完成后打开vmware准 ...
- Django rest-framework框架-组件之视图
视图: a. django class Test(View): ... b. rest_framework class Test(APIView): ... c. GenericAPIView 一般不 ...
- js之向div contenteditable光标位置添加字符
js之向div contenteditable光标位置添加字符 原理: 在HTML里面,光标是一个对象,光标对象是只有当你选中某个元素的时候才会出现的. 当我们去点击一个输入框的时候,实际上它会产生 ...
- Array+DP leetcode-11.装更多的水
11. Container With Most Water 题面 Given n non-negative integers a1, a2, ..., an , where each represen ...