就是求所有树最高的那棵树的高度

vi adj[M];
vi ind;
vi rt;
vi h;
int ans = 0;
void dfs(int u)
{
    for (int v : adj[u])
    {
        h[v] = h[u] + 1;
        dfs(v);
    }
}
void solve()
{
    cin >> n;
    ind.resize(n + 1, 0);
    h.resize(n + 1, 0);
    for (int i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        if (x != -1)
        {
            adj[x].push_back(i);
            ind[i]++;
        }
    }
    for (int i = 1; i <= n; i++)
    {
        if (ind[i] == 0)
        {
            rt.push_back(i);
        }
    }
    for (int i : rt)
    {
        h[i] = 1;
        dfs(i);
    }
    for (int i = 1; i <= n; i++)
    {
        ans = max(ans, h[i]);
    }
    cout << ans << endl;
}