제출 #899540

#제출 시각아이디문제언어결과실행 시간메모리
899540LucaIlieWorst Reporter 4 (JOI21_worst_reporter4)C++17
14 / 100
202 ms196884 KiB
#include <bits/stdc++.h> using namespace std; const int MAX_N = 5000; const long long INF = 1e15; int n; int parent[MAX_N + 1], height[MAX_N + 1], cost[MAX_N + 1]; long long dp[MAX_N + 1][MAX_N + 1]; vector<int> children[MAX_N + 1]; map<int, int> mp; void dfs( int u ) { for ( int v: children[u] ) dfs( v ); dp[u][n] = INF; for ( int x = n - 1; x >= 0; x-- ) { for ( int v: children[u] ) dp[u][x] += dp[v][x]; } long long c = cost[u] + dp[u][height[u]]; for ( int x = height[u]; x >= 0; x-- ) dp[u][x] = max( dp[u][x], c ); } int main() { long long c = 0; cin >> n; for ( int v = 1; v <= n; v++ ) cin >> parent[v] >> height[v] >> cost[v]; for ( int v = 2; v <= n; v++ ) children[parent[v]].push_back( v ); for ( int v = 1; v <= n; v++ ) mp[height[v]] = 1, c += cost[v]; int val = 0; for ( auto p: mp ) mp[p.first] = val++; for ( int v = 1; v <= n; v++ ) height[v] = mp[height[v]]; dfs( 1 ); cout << c - dp[1][0] << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...