传送门
https://www.luogu.com.cn/problem/P4913
AC代码(dfs)
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int MAXN=1e6+6;
struct Node{
int l,r;
}node[MAXN];
int ans;
void dfs(int root,int step){
if(root==0) return ;
ans=max(ans,step);
dfs(node[root].l,step+1);
dfs(node[root].r,step+1);
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>node[i].l>>node[i].r;
dfs(1,1);
cout<<ans;
return 0;
}
AC代码(bfs)
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int MAXN=1e6+6;
struct Node{
int id,l,r,deep;
}node[MAXN];
int ans;
void bfs(){
queue<Node>q;
Node res;
res.id=1;res.l=node[1].l;res.r=node[1].r;res.deep=1;
q.push(res);
while(!q.empty()){
Node now=q.front();q.pop();
ans=max(ans,now.deep);
if(now.l!=0){
res.id=now.l;
res.l=node[res.id].l;
res.r=node[res.id].r;
res.deep=now.deep+1;
q.push(res);
}
if(now.r!=0){
res.id=now.r;
res.l=node[res.id].l;
res.r=node[res.id].r;
res.deep=now.deep+1;
q.push(res);
}
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>node[i].l>>node[i].r;
bfs();
cout<<ans;
return 0;
}