枚举$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. Lottie 动画

    #### 三方框架之Lotti使用Lottie 的使用 1.添加 Gradle 依赖 dependencies { compile 'com.airbnb.android:lottie:1.5.3'} ...

  2. JAVA二分搜索树

    二叉树: 和链表一样,动态数据结构. 二叉树具有唯一根节点 二叉树具有天然的递归结构 二分搜索树是二叉树 二分搜索树的每个节点的值: 1.大于其左子树的所有节点的值 2.小于其右子树的所有节点的值 每 ...

  3. 函数wait和waitpid

    函数wait 一个进程在终止时会关闭所有文件描述符,释放在用户空间释放的内存,但它的PCB还保留着,内核在其中保存一些信息:如果是正常终止时则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号 ...

  4. 在CI框架中如何实现伪静态

    第一步:在根目录下(index.PHP)同一级目录下建立一个.htaccess这个文件文件内容(即红色标识所显示的内容) URI 类 和 URL 辅助函数 包含了一些函数可以让你更容易的处理 URI ...

  5. Html中,id、name、class、type的区别

    <input type="text" name="name" id="name" class="txt"> ...

  6. 'mysql' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    1.C:\Users\Aiyufei>mysql -h 127.0.0.1 -u root'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件.解决方法: 配置环境变量即可,我的问 ...

  7. bzoj 5099: [POI2018]Pionek

    题解: 还是比较简单的一道题 考虑现在有一个向量,当且仅当下一个向量与它夹角<90度这个向量的模长才会增加 接下来怎么做呢 如果我们去枚举初始向量,向量方向会随着新增向量而变化 随着不断顺时针的 ...

  8. window与linux文件共享解决方案

    我的系统是windows7 x64,虚拟机上的linux系统是centos6.5 方法一: 1.在win7系统上建立一个用户 2.在f盘建立一个文件夹linuxshare,然后右击-属性-共享-高级共 ...

  9. zabbix邮箱报警设置&问题汇总

    zabbix邮件报警部署! Zabbix监控服务端.客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常,通过查看Zabbix监控服务器,可以了解服务器的运行状态是否正常,运维人员不会时 ...

  10. 移动端iscroll实现日期选择

    哎,说多了都是泪: 引入相关JS文件 <script type="text/javascript" src="js/jquery-1.9.1.min.js" ...