#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
vector<int> vec[20010];//数组大小应该是m+n
int n,m,vis[20010];
int d[20010],ans=-1,temp;
int bfs(int node){
memset(vis,0,sizeof(vis));
memset(d,0,sizeof(d));
queue<int> q;
q.push(node);
d[node]=0;
vis[node]=1;
while(!q.empty()){
int tmp=q.front();
q.pop();
// cout<<tmp<<endl;
for(int i=0;i<vec[tmp].size();i++){
int v=vec[tmp][i];
// cout<<tmp<<' '<<v<<endl;
if(!vis[v]){
vis[v]=1;
q.push(v);
d[v]=d[tmp]+1;
if(ans<d[v]){
ans=d[v];
temp=v;
}
}
}
}
return 0;
}
int main(){
int a;
scanf("%d%d",&n,&m);
for(int i=2;i<=n;i++){
scanf("%d",&a);
vec[a].push_back(i);
vec[i].push_back(a);
}
for(int i=1;i<=m;i++){
scanf("%d",&a);
vec[a].push_back(i+n);
vec[i+n].push_back(a);
}
bfs(1);//两次bfs,找树的直径
// cout<<temp<<endl;
bfs(temp);
cout<<ans<<endl;
return 0;
}
ccf 网络延时
猜你喜欢
转载自blog.csdn.net/chan_yeol/article/details/52505909
今日推荐
周排行