题目:http://118.190.20.162/view.page?gpid=T24
#include <iostream>
#include <queue>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
using namespace std;
int n,m;
int dis[20010];
int vis[20010];
int p[20100],eid;
queue<int> q;
struct Node{
int v,next;
}E[20001];
void insert(int u,int v){
E[eid].v=v;
E[eid].next=p[u];
p[u]=eid++;
}
void BFS(int x){
vis[x]=1;
dis[x]=0;
q.push(x);
while(!q.empty()){
int now=q.front();
q.pop();
for(int i=p[now];i+1;i=E[i].next){
if(!vis[E[i].v]){
vis[E[i].v]=1;
q.push(E[i].v);
dis[E[i].v]=dis[now]+1;
}
}
}
}
int main() {
memset(p,-1,sizeof(p));
int t;
cin>>n>>m;
for(int i=2;i<=n;i++){
cin>>t;
insert(i,t);
insert(t,i);
}
for(int i=1;i<=m;i++){
cin>>t;
insert(n+i,t);
insert(t,n+i);
}
BFS(1);
int ans=-1;
int next=0;
for(int i=1;i<=n+m;i++){
if(dis[i]>ans){
ans=dis[i];
next=i;
}
}
memset(vis,0,sizeof(vis));
memset(dis,0,sizeof(dis));
BFS(next);
for(int i=1;i<=n+m;i++){
if(dis[i]>ans){
ans=dis[i];
}
}
cout<<ans<<endl;
return 0;
}