10分求条 Only AC #1
查看原帖
10分求条 Only AC #1
541523
__CuSO4__楼主2025/7/19 09:08
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;

int n, f[1005], ans[1005], t[1005];
vector<int> G[1005];

void dfs(int x, int fa)
{
    int cnt = 0;
    for (int y : G[x])
    {
        if (y == fa) continue;
        dfs(y, x);
        t[++cnt] = f[y];
    }
    // if (!cnt) return;
    sort(t + 1, t + 1 + cnt);
    for (int i = cnt; i >= 1; i--)
        f[x] = max(f[x], t[i]+cnt-i+1);
}

int main()
{
    cin >> n;
    for (int i = 2, x; i <= n; i++)
    {
        cin >> x; 
        G[x].push_back(i), G[i].push_back(x);
    }
    for (int i = 1; i <= n; i++)
    {
        memset(f, 0, sizeof(f));
        memset(t, 0, sizeof(t));
        dfs(i, -1);
        ans[i] = f[i];
    }
    int minn = 1e9;
    for (int i = 1; i <= n; i++) minn = min(minn, ans[i]);
    cout << minn+1 << endl;
    for (int i = 1; i <= n; i++)
        if (ans[i] == minn) cout << i << " ";
    return 0;
}

是朴素的 O(n2logn)O(n^2 \log n) 做法,不知道错在哪里。

Record

2025/7/19 09:08
加载中...