2024蓝桥A组D题-参考程序

时间:2024-04-23 07:26:22
#include<bits/stdc++.h>
using namespace std;
const int N=200020;
int c[N],d[N];
vector<int>e[N],f[N];
int dp[N];
void dfs(int x,int y,int p,int q)
{
    map<int,int>mp;
    for(int i=0;i<e[x].size();i++)
    {
        int nx=e[x][i];
        if(nx==p)continue;
        mp[c[nx]]=nx;
    }
    int mx=0;
    for(int i=0;i<f[y].size();i++)
    {
        int ny=f[y][i];
        if(ny==q)continue;
        if(mp.count(d[ny]))
        {
            dfs(mp[d[ny]],ny,x,y);
            mx=max(mx,dp[ny]);
        }
    }
    dp[y]=mx+1;
}
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>c[i];
    for(int i=1;i<=m;i++)cin>>d[i];
    for(int i=1;i<n;i++)
    {
        int u,v;cin>>u>>v;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    for(int i=1;i<m;i++)
    {
        int p,q;cin>>p>>q;
        f[p].push_back(q);
        f[q].push_back(p);
    }
    if(c[1]!=d[1])
    {cout<<0;return 0;}
    dfs(1,1,0,0);
    cout<<dp[1];
    return 0;
}