Submission #1359932

#TimeUsernameProblemLanguageResultExecution timeMemory
1359932gayCat Exercise (JOI23_ho_t4)C++20
14 / 100
2096 ms17648 KiB
#include <bits/stdc++.h>

using namespace std;

using ld = long double;
using ll = long long;

const int INF = 1e9, MOD = 1e9 + 7;

void solve();

signed main() {
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
    ios::sync_with_stdio(false);
    cin.tie(0);
    int q = 1;
    while (q--) {
        solve();
    }
}

vector<vector<ll>> g;

void fnd(ll v, ll t, ll p, vector<ll>& path) {
    if (path.empty() || path.back() != t) {
        path.push_back(v);
    }
    for (auto u : g[v]) {
        if (u != p) {
            fnd(u, t, v, path);
        }
    }
    if (path.empty() || path.back() != t) {
        path.pop_back();
    }
}

void solve() {
    ll n; cin >> n;
    vector<ll> p(n), val(n);
    for (int i = 0; i < n; i++) {
        ll x; cin >> x; x--;
        p[x] = i;
        val[i] = x;
    }
    g.resize(n);
    for (int i = 1; i < n; i++) {
        ll a, b; cin >> a >> b;
        a--, b--;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    vector<ll> dp(n, -INF);
    dp[n - 1] = 0;
    for (ll i = n - 2; i >= 0; i--) {
        for (ll j = i + 1; j < n; j++) {
            vector<ll> z;
            fnd(p[j], p[i], -1, z);
            ll mx = -1;
            for (ll x = 1; x < z.size(); x++) {
                mx = max(mx, val[z[x]]);
            }
            if (mx == i) {
                dp[i] = max(dp[i], dp[j] + (int)z.size() - 1);
            }
        }
    }
    ll ans = 0;
    for (int i = 0; i < n; i++) {
        ans = max(ans, dp[i]);
    }
    cout << ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...