Submission #775742

#TimeUsernameProblemLanguageResultExecution timeMemory
775742danikoynovMagic Tree (CEOI19_magictree)C++14
34 / 100
2036 ms75596 KiB
/** ____ ____ ____ ____ ____ ____ ||l |||e |||i |||n |||a |||d || ||__|||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\|/__\| **/ #include<bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } const int maxn = 1e5 + 10, maxk = 21; int n, m, k, p[maxn], w[maxn], d[maxn]; ll dp[maxn][maxk], diff[maxn][maxk]; vector < int > adj[maxn]; void dfs(int v) { for (int u : adj[v]) { dfs(u); for (int j = 0; j <= k; j ++) { dp[v][j] += dp[u][j]; diff[v][j] += diff[u][j]; //for (int j = 2; j <= k; j ++) //dp[v][j] = max(dp[v][j], dp[v][j - 1]); /**int pt = j; ll sum = diff[v][j]; while(sum < 0) { }*/ } } if (d[v] != 0) { dp[v][d[v]] += w[v]; diff[v][d[v] - 1] += w[v]; diff[v][d[v]] -= w[v]; } for (int j = 0; j < k; j ++) { if (diff[v][j] < 0) { diff[v][j + 1] += diff[v][j]; diff[v][j] = 0; } } for (int j = 2; j <= k; j ++) dp[v][j] = max(dp[v][j], dp[v][j - 1]); ///ll sum = 0; ///for (int j = 1) /**cout << "----------" << endl; cout << v << endl; for (int j = 1; j < k; j ++) cout << diff[v][j] << " "; cout << endl;*/ } void solve() { cin >> n >> m >> k; for (int i = 2; i <= n; i ++) { cin >> p[i]; adj[p[i]].push_back(i); } for (int i = 1; i <= m; i ++) { int v; cin >> v >> d[v] >> w[v]; } dfs(1); ll ans = 0; for (int j = 0; j < k; j ++) ans = ans + diff[1][j]; cout << ans << endl; } int main() { solve(); return 0; } /** 6 4 10 1 2 1 4 4 3 3 4 4 2 5 5 5 1 6 3 9 */
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...