标签:
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <cmath> using namespace std; #define INF 0x3f3f3f3f #define ll long long #define N 200010 #define M 10*N struct Edge{ int to,next; }edge[M]; int tot; int head[N]; int n,m; int dp[N][2]; void init() { tot=0; memset(head,-1,sizeof(head)); } void add(int u,int v) { edge[tot].to=v; edge[tot].next=head[u]; head[u]=tot++; } void dfs(int u) { dp[u][0]=dp[u][1]=0; for(int i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].to; dfs(v); if(dp[v][0]+1>=dp[u][0]){ dp[u][1]=dp[u][0]; dp[u][0]=dp[v][0]+1; } else if(dp[v][0]+1>dp[u][1]) dp[u][1]=dp[v][0]+1; } } int main() { while(scanf("%d%d",&n,&m)!=EOF) { init(); for(int i=2;i<=n;i++){ int x; scanf("%d",&x); add(x,i); } for(int i=1;i<=m;i++){ int x; scanf("%d",&x); add(x,i+n); } dfs(1); int ans=0; for(int i=1;i<=n+m;i++) ans=max(ans,dp[i][0]+dp[i][1]); printf("%d\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/hate13/p/4643573.html