제출 #782284

#제출 시각아이디문제언어결과실행 시간메모리
782284borisAngelovCat Exercise (JOI23_ho_t4)C++17
31 / 100
2058 ms17696 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 200005; const int inf = 1000000000; int n; vector<int> g[maxn]; int depth[maxn]; long long dp[maxn]; int permutation[maxn]; void dfs(int node, int par, int root) { for (auto next_node : g[node]) { if (next_node != par && next_node < root) { depth[next_node] = 1 + depth[node]; dfs(next_node, node, root); } } } void fastIO() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } int main() { fastIO(); cin >> n; for (int i = 1; i <= n; ++i) { cin >> permutation[i]; } for (int i = 1; i <= n - 1; ++i) { int x, y; cin >> x >> y; x = permutation[x]; y = permutation[y]; g[x].push_back(y); g[y].push_back(x); } dp[1] = 0; for (int i = 2; i <= n; ++i) { for (int j = 1; j <= n; ++j) { depth[j] = -inf; } depth[i] = 0; dfs(i, -1, i); for (int j = i - 1; j >= 1; --j) { dp[i] = max(dp[i], dp[j] + depth[j]); } } cout << dp[n] << endl; return 0; }
#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...