存储哈希表(一个键(关键词)对饮一个值)
同步遍历两棵树
数的写入:节点的写入以及边的写入。
#include<bits/stdc++.h>
using namespace std;
int ans=0;
const int N=2e5+9;
int a[N],b[N];
int n,m;
int u,v;map<int,vector<int> > m1,m2;//mp的定义
void dfs(int x,int y,int count)
{if(a[x]!=b[y]) return ;ans=max(ans,count+1);//maxb比较两个类型相同的数for(int i=0;i<m1[x].size();i++)//size返回向量里面有多少个元素for(int j=0;j<m2[y].size();j++){int a1=m1[x][i];int b1=m2[y][j];dfs(a1,b1,count+1);}
//这里是遍历某一结点的所有子节点,m1[x].size():含有子节点数。因为下标从零开始所以循环条不取等号}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];for(int j=1;j<=m;j++) cin>>b[j];for(int i=1;i<n;i++) //读取了n-1个数,但用的是push_back u,v{cin>>u>>v;m1[u].push_back(v);//将v放在键值u在m1中对应数组的最后面;}//push_backfor(int i=1;i<m;i++) {cin>>u>>v;m2[u].push_back(v);//将v放在键值u在m1中对应数组的最后面;}dfs(1,1,0);cout<<ans;return 0;
}