枚举$T_1$的树根,然后DP,设$f[i][j]$表示$T_1$的子树$i$是否存在包括i的连通子树与$T_2$的子树$j$同构。

若$j$是叶子,那么显然可以。

若$deg_i<deg_j$,那么显然不可以。

否则将$i$与$j$所有互相同构的儿子之间连边,二分图匹配判断是否存在完美匹配即可。

#include<cstdio>
#include<algorithm>
const int N=105;
int T,C,n,m,o,i,j,k,x,y;
int g[N],v[N<<1],nxt[N<<1],ed,f[N],d[N],deg[N],q[N];
int G[N],V[N<<1],NXT[N<<1],ED,F[N],D[N],DEG[N],Q[N];
bool dp[N][N],ok[N][N],b[N];int p[N];
inline bool cmp(int x,int y){return d[x]>d[y];}
inline bool CMP(int x,int y){return D[x]>D[y];}
inline void add(int*g,int*v,int*nxt,int&ed,int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
void dfs(int x,int y,int*f,int*d,int*deg,int*g,int*v,int*nxt){
f[x]=y,d[x]=d[y]+1;deg[x]=0;
for(int i=g[x];i;i=nxt[i])if(v[i]!=y)deg[x]++,dfs(v[i],x,f,d,deg,g,v,nxt);
}
bool find(int x){
for(int i=1;i<=o;i++)if(!b[i]&&ok[x][i]){
b[i]=1;
if(!p[i]||find(p[i]))return p[i]=x,1;
}
return 0;
}
inline void DP(int x,int y){
dp[x][y]=0;
if(deg[x]<DEG[y])return;
if(!DEG[y]){dp[x][y]=1;return;}
int n=o=0,i,j,cnt=0;
static int A[N],B[N];
for(i=g[x];i;i=nxt[i])if(v[i]!=f[x])A[++n]=v[i];
for(i=G[y];i;i=NXT[i])if(V[i]!=F[y])B[++o]=V[i];
for(i=1;i<=n;i++)for(j=1;j<=o;j++)ok[i][j]=dp[A[i]][B[j]];
for(i=1;i<=o;i++)p[i]=0;
for(i=1;i<=n;i++){
for(j=1;j<=o;j++)b[j]=0;
if(find(i)){
cnt++;
if(cnt==o){dp[x][y]=1;return;}
}
}
}
bool solve(){
scanf("%d",&n);
for(ed=0,i=1;i<=n;i++)g[i]=0,q[i]=i;
for(i=1;i<n;i++)scanf("%d%d",&x,&y),add(g,v,nxt,ed,x,y),add(g,v,nxt,ed,y,x);
scanf("%d",&m);
for(ED=0,i=1;i<=m;i++)G[i]=0;
for(i=1;i<m;i++)scanf("%d%d",&x,&y),add(G,V,NXT,ED,x,y),add(G,V,NXT,ED,y,x);
dfs(1,0,F,D,DEG,G,V,NXT);
for(i=1;i<=m;i++)Q[i]=i;
std::sort(Q+1,Q+m+1,CMP);
for(i=1;i<=n;i++){
dfs(i,0,f,d,deg,g,v,nxt);
std::sort(q+1,q+n+1,cmp);
for(j=1;j<=n;j++)for(k=1;k<=m;k++)DP(q[j],Q[k]);
if(dp[i][1])return 1;
}
return 0;
}
int main(){
for(scanf("%d",&T);T--;puts(solve()?"YES":"NO"));
return 0;
}

  

BZOJ2368 : Modern Art Plagiarism 树同构的更多相关文章

  1. uva12489 Combating cancer(树同构)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud https://uva.onlinejudge.org/index.php?opt ...

  2. BZOJ4337: BJOI2015 树的同构(hash 树同构)

    题意 题目链接 Sol 树的同构问题,直接拿hash判一下,具体流程大概是这样的: 首先转化为有根树,预处理出第\(i\)棵树以\(j\)为根时的hash值. 那么两个树同构当且仅当把两棵树的hash ...

  3. bzoj 4780: [Usaco2017 Open]Modern Art 2

    4780: [Usaco2017 Open]Modern Art 2 Time Limit: 10 Sec  Memory Limit: 128 MB Description Having becom ...

  4. lesson 18 Electric currents in modern art

    lesson18 Electric currents in modern art electricity n. 电力:电流; electric adj. 电的:电动的; electronic adj. ...

  5. Luogu 5043 【模板】树同构([BJOI2015]树的同构)

    BZOJ 4337 简单记录一种树哈希的方法:以$x$为根的子树的哈希值为$\sum_{y \in son(x)}f_y*base_i$,$f_y$表示以$y$为根的树的哈希值,其中$i$表示$f_y ...

  6. 洛谷P3668 [USACO17OPEN]Modern Art 2 现代艺术2

    P3668 [USACO17OPEN]Modern Art 2 现代艺术2 题目背景 小TY的同学HF也想创作艺术 HF只有一块长条状的画布(画条),所以每一次涂色只能涂上连续几个单位的颜料,同样新的 ...

  7. 『Andrew and Chemistry 树同构』

    Andrew and Chemistry Description During the chemistry lesson Andrew learned that the saturated hydro ...

  8. 【CF1252F】Regular Forestation(重心,树同构)

    题意:给定一棵n个点的树,问删去某个点之后所有的树同构,这样分割出来的树最多能有几棵 n<=4000 思路:分割成至少两个size相等的联通块之后size必定小于n/2,与树的重心的定义相同 预 ...

  9. luogu P5043 【模板】树同构 hash 最小表示法

    LINK:模板 树同构 题目说的很迷 给了一棵有根树 但是重新标号 言外之意还是一棵无根树 然后要求判断是否重构. 由于时无根的 所以一个比较显然的想法暴力枚举根. 然后做树hash或者树的最小表示法 ...

随机推荐

  1. python爬虫-淘宝商品密码(图文教程附源码)

    今天闲着没事,不想像书上介绍的那样,我相信所有的数据都是有规律可以寻找的,然后去分析了一下淘宝的商品数据的规律和加密方式,用了最简单的知识去解析了需要的数据. 这个也让我学到了,解决问题的方法不止一个 ...

  2. ready()事件;使外置JS代码正常运行

    JavaScript代码放在哪里? 浏览器在渲染HTML页面时,是从头到尾,一行一行地检查执行的.如果JavaScript代码在前面,HTML元素在后面,遇到JavaScript选择一个还未渲染的HT ...

  3. Just Oj 2017C语言程序设计竞赛高级组E: DATE ALIVE(二分匹配)

    E: DATE ALIVE 时间限制: 1 s      内存限制: 128 MB 提交 我的状态 题目描述 五河士道家里的精灵越来越多了,而每一个精灵都想和他有一个约会.然而五河士道却只有一个,无奈 ...

  4. 一脸懵逼学习HBase的搭建(注意HBase的版本)

    1:Hdfs分布式文件系统存的文件,文件存储. 2:Hbase是存储的数据,海量数据存储,作用是缓存的数据,将缓存的数据满后写入到Hdfs中. 3:hbase集群中的角色: ().一个或者多个主节点, ...

  5. 挂在光盘出现写保护mount: block device /dev/sr0 is write-protected, mounting read-only

    https://blog.csdn.net/yueludanfeng/article/details/60339688

  6. Python 命令模式和交互模式

    命令模式 在系统CMD命名模式下执行 命令执行到脚本所在目录 执行python Test.py 可直接一次执行完脚本里面所有的语句 交互模式下 一行一行执行

  7. Apache Pulsar——企业级消息订阅系统介绍

    Apache Pulsar是一款由雅虎开发的类似于Kafka的企业级消息订阅系统,在2016将其开源,由Apach基金会孵化,现在已经成长为Apache基金会的顶级项目.Pulsar在雅虎内部已经运行 ...

  8. 跨域资源共享 CORS 详解(转自阮一峰博客)

    CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从 ...

  9. 在启用了“编辑并继续”时,修改包含 lambda 表达式的“method”将会阻止调试会话继续进行

    将所有的引用的“复制到本地”属性都设置成false就可以了

  10. linux 软中断过高性能优化案例

    案例如下: 发现cpu0上的软中断高达50%