BZOJ2368 : Modern Art Plagiarism 树同构
枚举$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 树同构的更多相关文章
- uva12489 Combating cancer(树同构)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud https://uva.onlinejudge.org/index.php?opt ...
- BZOJ4337: BJOI2015 树的同构(hash 树同构)
题意 题目链接 Sol 树的同构问题,直接拿hash判一下,具体流程大概是这样的: 首先转化为有根树,预处理出第\(i\)棵树以\(j\)为根时的hash值. 那么两个树同构当且仅当把两棵树的hash ...
- bzoj 4780: [Usaco2017 Open]Modern Art 2
4780: [Usaco2017 Open]Modern Art 2 Time Limit: 10 Sec Memory Limit: 128 MB Description Having becom ...
- lesson 18 Electric currents in modern art
lesson18 Electric currents in modern art electricity n. 电力:电流; electric adj. 电的:电动的; electronic adj. ...
- Luogu 5043 【模板】树同构([BJOI2015]树的同构)
BZOJ 4337 简单记录一种树哈希的方法:以$x$为根的子树的哈希值为$\sum_{y \in son(x)}f_y*base_i$,$f_y$表示以$y$为根的树的哈希值,其中$i$表示$f_y ...
- 洛谷P3668 [USACO17OPEN]Modern Art 2 现代艺术2
P3668 [USACO17OPEN]Modern Art 2 现代艺术2 题目背景 小TY的同学HF也想创作艺术 HF只有一块长条状的画布(画条),所以每一次涂色只能涂上连续几个单位的颜料,同样新的 ...
- 『Andrew and Chemistry 树同构』
Andrew and Chemistry Description During the chemistry lesson Andrew learned that the saturated hydro ...
- 【CF1252F】Regular Forestation(重心,树同构)
题意:给定一棵n个点的树,问删去某个点之后所有的树同构,这样分割出来的树最多能有几棵 n<=4000 思路:分割成至少两个size相等的联通块之后size必定小于n/2,与树的重心的定义相同 预 ...
- luogu P5043 【模板】树同构 hash 最小表示法
LINK:模板 树同构 题目说的很迷 给了一棵有根树 但是重新标号 言外之意还是一棵无根树 然后要求判断是否重构. 由于时无根的 所以一个比较显然的想法暴力枚举根. 然后做树hash或者树的最小表示法 ...
随机推荐
- linux 系统备份和恢复
Linux不像windows,它不限制根用户存取任何东西,因此,你完全可以把一个分区上每一个的文件放入一个TAR文件中. 使用root用户切换到根目录 然后,使用下面的命令备份完整的系统: tar c ...
- 20165323 实验一 Java开发环境的熟悉
一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:杨金川 学号:20165323 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验时间:13:45 - 15:25 实验序号:一 实 ...
- node.js(一)
安装官网: https://nodejs.org/en/ 运行代码: var http=require('http') http.createServer(function(req,res){ res ...
- Nginx中配置undertow进行两个项目的动静分离配置
#user nobody; worker_processes ; pid /var/run/nginx.pid; events { worker_connections ; } http { incl ...
- python---顺序查找,二分查找
比较熟悉了. 但要注意细节, 二分查找时,普通方法mid处理,递归时,mid处理. # coding = utf-8 def sequential_search(a_list, item): pos ...
- webpack学习笔记--多种配置类型
除了通过导出一个 Object 来描述 Webpack 所需的配置外,还有其它更灵活的方式,以简化不同场景的配置. 下面来一一介绍它们. 导出一个 Function 在大多数时候你需要从同一份源代码中 ...
- C#操作windows服务
本文主要说明了Windows服务的安装.卸载.启动.停止.获取服务安装路径.获取服务状态.检查服务是否存在.获取服务版本. 我们需要引用命名空间using System.Configuration.I ...
- [转]启动tensorboard
https://vivekcek.wordpress.com/tag/tensorboard-windows/ Visualise Computational Graphs with Tensor ...
- mysql配置为半同步复制
mysql 半同步插件是由谷歌提供,具体位置/usr/local/mysql/lib/plugin/下,一个是 master用的 semisync_master.so,一个是 slave 用的 sem ...
- Centos 6.5 本地局域网基于HTTP搭建YUM
服务端配置 init 3 文本 init5 图形 init 0 关机 init 1 重启 ls 查看 mkdir创建文件 关闭防火墙service iptables stop chkconfig ...