#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int N=1e5+10,M=1e6+10;
vector<int>v[N],g[M];
int n,x,y,de[M],cnt,len[N],maxn=-1e9,pos,ans,tp,tot,a[N],b[N],maxde;
void dfs(int x,int fa){
de[x]=de[fa]+1;
if(de[x]>maxde)maxde=de[x],pos=x;
for(auto y:g[x])if(y!=fa)dfs(y,x);
}
int main(){
scanf("%d",&n);de[0]=-1;
for(int i=1,sum,f;i<=n;i++){
scanf("%d",&sum);
v[i].push_back(0);
v[i].push_back(sum);
for(int j=2;j<=sum;j++){
scanf("%d",&f);
v[i].push_back(f);
}
}
scanf("%d %d",&x,&y);
for(int i=1;i<=n;i++){
int m=v[i][1];
for(int j=2;j<=m;j++){
g[j].push_back(v[i][j]);
g[v[i][j]].push_back(j);
}
if(i==1){
maxde=0,dfs(1,0),ans+=de[x],a[1]=de[x];
maxde=0,dfs(x,0),b[1]=maxde;
}else if(i==2){
maxde=0,dfs(1,0),ans+=de[y],a[2]=de[y];
maxde=0,dfs(y,0),b[2]=maxde;
}else{
maxde=0,dfs(1,0),ans+=maxde,a[i]=maxde;
maxde=0,dfs(pos,0),b[i]=maxde;
}
for(int j=1;j<=m;j++)g[j].clear(),de[j]=0;
}
for(int i=1;i<=n;i++)maxn=max(maxn,b[i]-a[i]);
printf("%d\n",maxn+ans+n-1);
return 0;
}
第 12 个点答案错误,为什么?求大佬解答