不得不说这是神题。

%%%   http://blog.csdn.net/samjia2000/article/details/51762811

 #include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>
#define inf 0x3f3f3f3f
#define LL long long
#define eps 1e-8
#define N 100005
using namespace std;
inline int ra()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
} const int mod=1e++;
const int prime=; LL tim[N],q[N];
int k;
struct node{int to,x; LL v;}u[N];
bool cmp(node a, node b){return a.v<b.v;} struct tree
{
int cnt,head[N];
struct edge{int to,next;}e[N<<];
int n,r[N],fa[N],size[N];
LL v[N],rt[N],f[N];
LL suf[N],pre[N]; void insert(int x, int y){e[++cnt].next=head[x]; e[cnt].to=y; head[x]=cnt;}
void init()
{
cnt=;
for (int i=; i<=n; i++) head[i]=r[i]=f[i]=fa[i]=rt[i]=;
for (int i=; i<n; i++)
{
int x=ra(),y=ra();
insert(x,y); insert(y,x);
r[x]++; r[y]++;
}
} void dfs1(int x)
{
size[x]=;
for (int i=head[x];i;i=e[i].next)
{
if (e[i].to==fa[x]) continue;
fa[e[i].to]=x;
dfs1(e[i].to);
size[x]+=size[e[i].to];
}
k=;
for (int i=head[x];i;i=e[i].next)
if (fa[e[i].to]==x) q[++k]=v[e[i].to];
sort(q+,q+k+);
v[x]=;
for (int i=; i<=k; i++) v[x]=(v[x]*prime%mod+q[i])%mod;
v[x]=(v[x]*prime%mod+size[x])%mod;
} void dfs2(int x)
{
k=;
if (x>) u[++k].v=f[x],u[k].to=fa[x];
for (int i=head[x];i;i=e[i].next)
if (fa[e[i].to]==x)
{
u[++k].to=e[i].to;
u[k].v=v[e[i].to];
}
sort(u+,u++k,cmp);
for (int i=; i<=k; i++) pre[i]=(pre[i-]*prime%mod+u[i].v)%mod;
suf[k+]=;
for (int i=k; i>=; i--) suf[i]=(suf[i+]+u[i].v*tim[k-i]%mod)%mod;
for (int i=; i<=k; i++)
if (u[i].to!=fa[x])
{
f[u[i].to]=(pre[i-]*tim[k-i]%mod+suf[i+])%mod;
f[u[i].to]=(f[u[i].to]*prime%mod+n-size[u[i].to])%mod;
}
for (int i=head[x];i;i=e[i].next)
if (fa[e[i].to]==x) dfs2(e[i].to);
}
void cal()
{
dfs1(); dfs2();
for (int x=; x<=n; x++)
{
k=;
for (int i=head[x];i;i=e[i].next)
if (fa[e[i].to]==x) q[++k]=v[e[i].to];
if (fa[x]) q[++k]=f[x];
sort(q+,q+k+);
rt[x]=;
for (int i=; i<=k; i++) rt[x]=(rt[x]*prime%mod+q[i])%mod;
rt[x]=(rt[x]*prime%mod+n)%mod;
}
}
}a,b; int m;
set<LL> s; int main(int argc, char const *argv[])
{
tim[]=; s.clear();
m=ra();
for (int i=; i<=m+; i++) tim[i]=tim[i-]*prime%mod;
a.n=m; a.init(); b.n=m+; b.init(); a.cal(); b.cal();
for (int i=; i<=m; i++) s.insert(a.rt[i]);
for (int i=; i<=m+; i++)
if (b.r[i]== && ((i!= && s.find(b.f[i])!=s.end()) || (i== && s.find(b.v[b.e[b.head[i]].to])!=s.end())))
{
printf("%d\n",i); return ;
}
return ;
}

bzoj 4754: [Jsoi2016]独特的树叶的更多相关文章

  1. BZOJ 4754 [JSOI2016]独特的树叶 | 树哈希判同构

    题目链接 这道题是一道判断无根树同构的模板题,判断同构主要的思路就是哈希. 一遇到哈希题,一百个人能有一百零一种哈希方式,这篇题解随便选用了一种--类似杨弋<Hash在信息学竞赛中的一类应用&g ...

  2. BZOJ4754 & 洛谷4323 & LOJ2072:[JSOI2016]独特的树叶——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4754 https://www.luogu.org/problemnew/show/P4323 ht ...

  3. Luogu P4323 [JSOI2016]独特的树叶

    一道比较好的树Hash的题目,提供一种不一样的Hash方法. 首先无根树的同构判断一般的做法只有树Hash,所以不会的同学可以做了Luogu P5043 [模板]树同构([BJOI2015]树的同构) ...

  4. bzoj4754[JSOI2016]独特的树叶

    这个题....别人写得怎么都....那么短啊? 我怎么....WA了好几次啊....怎么去loj扒了数据才调出来啊? 这个算法...怎么我还是不知道对不对啊 怎么回事啊怎么回事啊怎么回事啊? 请无视上 ...

  5. BZOJ4754 JSOI2016独特的树叶(哈希)

    判断两棵无根树是否同构只需要把重心提作根哈希即可.由于只添加了一个叶子,重心的位置几乎不发生偏移,所以直接把两棵树的重心提起来,逐层找哈希值不同且对应的两子树即可.被一个普及组子问题卡一年. #inc ...

  6. Luogu 4323 [JSOI2016]独特的树叶

    新技能get 树哈希,考虑到两棵树相同的条件,把每一个结点的哈希值和树的siz写进哈希值里去. 做出A树每一个结点为根时的树的哈希值丢进set中,然后暴力枚举B树中度数为1的点,求出删掉这个点之后的哈 ...

  7. P4323 [JSOI2016]独特的树叶(树哈希)

    传送门 树哈希?->这里 反正大概就是乱搞--的吧-- //minamoto #include<bits/stdc++.h> #define R register #define l ...

  8. [JSOI2016]独特的树叶

    https://zybuluo.com/ysner/note/1177340 题面 有一颗大小为\(n\)的树\(A\),现加上一个节点并打乱编号,形成树\(B\),询问加上的节点最后编号是多少? \ ...

  9. 【BZOJ4754】独特的树叶(哈希)

    [BZOJ4754]独特的树叶(哈希) 题面 BZOJ 给定一个\(n\)个节点的树A和一个\(n+1\)个节点的树\(B\) 求\(B\)的一个编号最小的节点,使得删去这个节点后\(A,B\)同构 ...

随机推荐

  1. ThinkPHP5 动态生成图片缩略图

    需求场景 不同终端(PC端.手机端.平板),不同界面(列表页.详情页),对图片大小的要求不一样, 如果所有场景下都使用同一尺寸的图片,势必对会网络带宽及服务器性能造成一定的影响,由此需要服务器端能够根 ...

  2. python中:from * import 与 import 详解

    在python 中导入模块是我们最常用的功能,基本每个.py 文件中都会有 import 或者是 from * import 语句,可是,这两种方法有什么不同,有该怎么用?今天就好好分析一下. 先上定 ...

  3. 【代码总结】PHP文件的上传和下载

    ===================== 文件上传和下载 ===================== 一.php.ini的配置信息 file_uploads = On /Off    是否允许文件上 ...

  4. python的datetime、random和os模块使用方法

    import datetime# print(datetime.date.today())# print(datetime.datetime.today())# res=datetime.dateti ...

  5. CSS概述(最详细!!!)

    一.先综述 二.分述: 1.简介: 2.基本用法 3.引入方式: 4.盒模型         5.选择器:   6.常见文本样式及复合样式       7.改变行.块元素的属性: 8.标签显示与隐藏: ...

  6. SwiftStack 因战略转变而裁员

    导读 销售团队在前段圣诞节来临前面临裁减的糟糕处境.企业云存储公司SwiftStack进行了裁员,人数不详,公司规模因此缩小. IT外媒The Register获悉,这家公司裁掉了大概一半的人员,但总 ...

  7. IntelliJ IDEA 破解之后,用了一段时间后,打开软件提示 no suitable licenses left on the license server

    IntelliJ IDEA 破解之后,用了一段时间后,打开软件提示 no suitable licenses left on the license server 需要让我们重新注册,原来是之前的地址 ...

  8. Centos7 安装redis及简单使用

    一.redis的介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset( ...

  9. LibreOJ #2006. 「SCOI2015」小凸玩矩阵

    想了挺久没想出来,一看题解恍然大悟.一个数对应一行和一列,二分答案,凡是小于等于答案的就连边.如果满足能够取出 \(n - k + 1\) 个不比二分中点 \(mid\) 大的数,那么r = mid, ...

  10. 【快学springboot】8.JPA乐观锁OptimisticLocking

    介绍 当涉及到企业应用程序时,正确地管理对数据库的并发访问是至关重要的.为此,我们可以使用Java Persistence API提供的乐观锁定机制.它导致在同一时间对同一数据进行多次更新不会相互干扰 ...