题解:

先找到中信

然后dp

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,mx,go,bx,by,rot,x,y,g[N][],a[N],b[N],s[N],c[N],f[N];
void dfs(int x,int fa,int dep)
{
s[++s[]]=x;
if (dep>mx)
{
mx=dep;
go=x;
memcpy(c,s,sizeof s);
}
for (int i=;i<=g[x][];i++)
if (g[x][i]!=fa) dfs(g[x][i],x,dep+);
s[]--;
}
void build(int x,int fa)
{
int t[];
t[]=;
for (int i=;i<=g[x][];i++)
if (g[x][i]!=fa&&!(x==bx&&g[x][i]==by||x==by&&g[x][i]==bx))
t[++t[]]=g[x][i];
memcpy(g[x],t,sizeof t);
for (int i=;i<=g[x][];i++) build(g[x][i],x);
}
int dp(int x,int y)
{
int w[][];
if (g[x][]!=g[y][]) return (~0U>>);
for (int i=;i<=g[x][];i++)
for (int j=;j<=g[y][];j++)w[i][j]=dp(g[x][i],g[y][j]);
for (int i=;i<<<g[x][];i++)f[i]=(~0U>>);
f[(<<g[x][])-]=;
for (int i=(<<g[x][])-;i;i--)
if (f[i]<(~0U>>))
{
int cnt=g[x][];
for (int j=;j<g[x][];j++)
if (i&(<<j)) cnt--;
for (int j=;j<g[x][];j++)
if (i&(<<j))f[i^(<<j)]=min(f[i^(<<j)],f[i]+w[cnt+][j+]);
}
return f[]+(a[x]!=b[y]);
}
int main()
{
scanf("%d",&n);
for (int i=;i<n;i++)
{
scanf("%d%d",&x,&y);
g[x][++g[x][]]=y;
g[y][++g[y][]]=x;
}
for (int i=;i<=n;i++) scanf("%d",&a[i]);
for (int i=;i<=n;i++) scanf("%d",&b[i]);
dfs(,,);
dfs(go,mx=,);
if (c[]&) rot=c[+c[]>>];
else
{
rot=n+;
bx=g[rot][++g[rot][]]=c[c[]>>];
by=g[rot][++g[rot][]]=c[(c[]>>)+];
}
build(rot,);
printf("%d",dp(rot,rot));
return ;
}

最新文章

  1. AOP面向切面编程的四种实现
  2. 体验VS2015 Update 2 的 Android 和 Python
  3. 【Codeforces715C&amp;716E】Digit Tree 数学 + 点分治
  4. .NET程序优化
  5. 正整数的n次方求和
  6. hdu 5586 Sum【dp最大子段和】
  7. 介绍map.entry接口
  8. C++中为什么要用虚函数、指针或引用才能实现多态?
  9. BZOJ 1015 [JSOI2008]星球大战starwar
  10. setTimeout的时间设为0的问题
  11. Oracle与mysql的字段类型整理
  12. 如何兼容所有Android版本选择照片或拍照然后裁剪图片--基于FileProvider和动态权限的实现
  13. nyoj 仿射密码
  14. 经典合集 - WP8.1数据源
  15. Gym 101194L / UVALive 7908 - World Cup - [三进制状压暴力枚举][2016 EC-Final Problem L]
  16. Eclipse Python 开发环境搭建 pydev 插件
  17. springboot系列七:springboot 集成 MyBatis、事物配置及使用、druid 数据源、druid 监控使用
  18. pythoy-生成器
  19. ReactNative仿微信朋友圈App
  20. 设计多选一按钮ChooseOnlyButton

热门文章

  1. [转]Algolia的分布式搜索网络架构
  2. LinQ高级查询、组合查询、IQueryable集合类型
  3. Java堆内存设置
  4. motan rpc
  5. Linux查看端口占用情况,并强制释放占用的端口
  6. python_threading模块实现多线程详解(转)
  7. centos6.9 升级glibc(升级到 2.17版)
  8. ubuntu系统samba服务的安装配置
  9. Juniper SRX 简单命令一
  10. Centos7.5静默安装Oracle18c