제출 #782766

#제출 시각아이디문제언어결과실행 시간메모리
782766thimote75Cat Exercise (JOI23_ho_t4)C++14
31 / 100
2068 ms18764 KiB

#include <bits/stdc++.h>

using namespace std;

using idata = vector<int>;
using igrid = vector<idata>;

idata height;
idata pos;

idata dp;
igrid roads;

int solve (int node, int parent, int depth) {
    if (dp[node] == -1) return 0;
    int mx = depth + dp[node];

    for (int next : roads[node]) if (next != parent)
        mx = max(mx, solve(next, node, depth + 1));

    return mx;
}

int main () {
    int N;
    cin >> N;

    height.resize(N);
    pos.resize(N);
    for (int i = 0; i < N; i ++) {
        cin >> height[i]; height[i] --;
        pos[height[i]] = i;
    }
    roads.resize(N);
    for (int i = 1; i < N; i ++) {
        int a, b;
        cin >> a >> b;
        a --; b --;
        roads[a].push_back(b);
        roads[b].push_back(a);
    }
    dp.resize(N, -1);
    for (int i = 0; i < N; i ++) {
        dp[pos[i]] = 0;
        dp[pos[i]] = solve(pos[i], -1, 0);
    }

    cout << dp[pos[N - 1]] << endl;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...