代码如下:
#include<iostream>
using namespace std;
struct node{
    int ls,rs;
    explicit node(int _ls=-1,int _rs=-1):ls(_ls),rs(_rs){}
};
class tree{
private:
    int now_size,max_rank=-1;
    node* nodes;
public:
    explicit tree(const size_t& size):now_size(0),nodes(new node[size]){}
    ~tree(){delete[] nodes;}
    void insert(node in){
        if(not in.ls)in.ls=in.rs=-1;
        else in.ls--,in.rs--;
        nodes[now_size++]=in;
    }
    void dfs(const int& index,int rank){
        if(index==-1)return;
        max_rank=max(max_rank,rank);
        dfs(nodes[index].ls,rank+1);
        dfs(nodes[index].rs,rank+1);
    }
    int get_ans()const{return max_rank;}
};
int n;
node Node;
int main(){
    cin>>n;
    tree Tree(n);
    for(int i=0;i<n;i++)cin>>Node.ls>>Node.rs,Tree.insert(Node);
    Tree.dfs(0,1);
    cout<<Tree.get_ans();
    return 0;
}