Submission #1039919

#TimeUsernameProblemLanguageResultExecution timeMemory
1039919juicyWorst Reporter 4 (JOI21_worst_reporter4)C++17
79 / 100
233 ms113920 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "debug.h" #else #define debug(...) 42 #endif const int N = 2e5 + 5; int n; int a[N], c[N], lab[N], deg[N]; bool vis[N]; vector<int> g[N], gph[N]; map<int, long long> mp[N]; void dfs(int u) { for (int v : g[u]) { dfs(v); if (mp[u].size() < mp[v].size()) { mp[u].swap(mp[v]); } for (auto [x, y] : mp[v]) { mp[u][x] += y; } } if (a[u] != -1) { mp[u][a[u]] += c[u]; for (auto it = mp[u].upper_bound(a[u]); it != mp[u].end(); it = mp[u].erase(it)) { auto &delta = (*it).second; if (c[u] < delta) { delta -= c[u]; break; } c[u] -= delta; } } } vector<int> st, ver; void DFS(int u) { ver.push_back(u); vis[u] = 1; st.push_back(u); for (int v : gph[u]) { if (vis[v]) { while (1) { int x = st.back(); st.pop_back(); lab[x] = u; if (u != x) { c[u] += c[x]; } if (a[x] != a[u]) { a[u] = -1; } if (x == v) { break; } } } else { DFS(v); } } if (lab[u] == -1) { st.pop_back(); } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n; long long res = 0; for (int i = 1; i <= n; ++i) { int p; cin >> p >> a[i] >> c[i]; a[i] = 1e9 - a[i] + 1; res += c[i]; gph[p].push_back(i); } fill(lab + 1, lab + n + 1, -1); for (int i = 1; i <= n; ++i) { if (!vis[i]) { DFS(i); for (int u : ver) { for (int v : gph[u]) { if (lab[v] == -1) { g[u].push_back(v); ++deg[v]; } } } for (int u : ver) { if ((lab[u] == -1 || lab[u] == u) && !deg[u]) { dfs(u); for (auto [x, y] : mp[u]) { res -= y; } } } ver.clear(); } } cout << res; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...