题目描述
样例
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
int n,m,a,b,ans=0;
int h[2][N],e[2][2*N],ne[2][2*N],w[2][N],idx1,idx2;
void add1(int x,int y){
e[0][idx1]=y,ne[0][idx1]=h[0][x],h[0][x]=idx1++;
}
void add2(int x,int y){
e[1][idx2]=y,ne[1][idx2]=h[1][x],h[1][x]=idx2++;
}
void dfs(int u1,int u2,int f1,int f2,int dep){
ans = max(dep,ans);
unordered_map<int,int> mp;
for(int i=h[0][u1];i!=-1;i=ne[0][i]){
int j = e[0][i];
if(j!=f1){
mp[w[0][j]] = j;
}
}
for(int i=h[1][u2];i!=-1;i=ne[1][i]){
int j = e[1][i];
if(j!=f2){
if(mp.find(w[1][j])!=mp.end()){
dfs(mp[w[1][j]],j,u1,u2,dep+1);
}
}
}
}
int main(){
cin>>n>>m;
memset(h,-1,sizeof h);
for(int i=1;i<=n;i++) cin>>w[0][i];
for(int i=1;i<=m;i++) cin>>w[1][i];
for(int i=1;i<n;i++){
cin>>a>>b;
add1(a,b);
add1(b,a);
}
for(int i=1;i<m;i++){
cin>>a>>b;
add2(a,b);
add2(b,a);
}
dfs(1,1,0,0,1);
cout<<ans<<endl;
return 0;
}