제출 #781433

#제출 시각아이디문제언어결과실행 시간메모리
781433boris_mihovCat Exercise (JOI23_ho_t4)C++17
31 / 100
2062 ms16604 KiB
#include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <vector> typedef long long llong; const int MAXN = 200000 + 10; const int INF = 1e9; int n; int d[MAXN]; int dp[MAXN]; std::vector <int> g[MAXN]; void getDist(int node, int p, int root) { d[node] = d[p] + 1; for (const int &u : g[node]) { if (u == p || u > root) { continue; } getDist(u, node, root); } } void solve() { dp[1] = 0; for (int i = 2 ; i <= n ; ++i) { std::fill(d + 1, d + 1 + n, -INF); d[0] = -1; getDist(i, 0, i); for (int j = i - 1 ; j >= 1 ; --j) { dp[i] = std::max(dp[i], dp[j] + d[j]); } } std::cout << dp[n] << '\n'; } void input() { std::cin >> n; for (int i = 1 ; i <= n ; ++i) { std::cin >> d[i]; } for (int i = 2 ; i <= n ; ++i) { int u, v; std::cin >> u >> v; g[d[u]].push_back(d[v]); g[d[v]].push_back(d[u]); } } void fastIOI() { std::ios_base :: sync_with_stdio(0); std::cout.tie(nullptr); std::cin.tie(nullptr); } int main() { fastIOI(); input(); solve(); 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...