제출 #945258

#제출 시각아이디문제언어결과실행 시간메모리
945258vladiliusCat Exercise (JOI23_ho_t4)C++17
0 / 100
2 ms4956 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int msz = 2e5 + 5;
using pii = pair<int, int>;

vector<int> g[msz];

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n; cin>>n;
    vector<int> a(n + 1);
    int s = 0;
    for (int i = 1; i <= n; i++){
        cin>>a[i];
        if (a[i] == n){
            s = i;
        }
    }
    for (int i = 1; i < n; i++){
        int a, b; cin>>a>>b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    vector<bool> used(n + 1);
    function<pii(int, int, int)> dfs = [&](int v, int d, int pr){
        int maxi = v, dist = d;
        for (int i: g[v]){
            if (used[i] || i == pr) continue;
            auto [mx, dd] = dfs(i, d + 1, v);
            if (mx > maxi){
                maxi = mx;
                dist = dd;
            }
        }
        pii ret = {maxi, dist};
        return ret;
    };
    function<ll(int)> f = [&](int v){
        used[v] = true;
        ll out = 0;
        for (int i: g[v]){
            if (used[i]) continue;
            auto [u, d] = dfs(i, 1, 0);
            out = max(out, d + f(u));
        }
        return out;
    };
    cout<<f(s)<<"\n";
}
#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...