Submission #1033721

#TimeUsernameProblemLanguageResultExecution timeMemory
1033721underwaterkillerwhaleWorst Reporter 4 (JOI21_worst_reporter4)C++17
79 / 100
355 ms71108 KiB
#include <bits/stdc++.h> #define se second #define fs first #define mp make_pair #define pb push_back #define ll long long #define ii pair<ll,ll> #define ld long double #define SZ(v) (int)v.size() #define ALL(v) v.begin(), v.end() #define bit(msk, i) ((msk >> i) & 1) #define iter(id, v) for(auto id : v) #define rep(i,m,n) for(int i=(m); i<=(n); i++) #define reb(i,m,n) for(int i=(m); i>=(n); i--) using namespace std; mt19937_64 rd(chrono :: steady_clock :: now().time_since_epoch().count()); ll Rand(ll l, ll r) { return uniform_int_distribution<ll> (l, r)(rd); } const int N = 2e5 + 7; const int Mod = 1e9 + 7; const int szBL = 320; const int INF = 1e9; const int BASE = 137; struct Data { int A, H, C; }; int n; Data a[N]; int szC[N]; vector<int> ke[N]; map<int,ll> dp[N];///dp[u]: decreasing function int dd[N]; void dfs (int u) { dd[u] = 1; szC[u] = 1; int mxV = -1; // cout << u <<"\n"; iter (&v, ke[u]) { dfs (v); szC[u] += szC[v]; if (mxV == -1 || szC[v] > szC[mxV]) { mxV = v; } } if (mxV != -1) swap(dp[u], dp[mxV]); dp[u][1] += 0; iter (&v, ke[u]) { if (v == mxV) continue; iter (&id, dp[v]) { if (id.fs != 1) { dp[u][id.fs] += id.se; dp[u][1] -= id.se; // cout << "upd: "<<u<<" "<<v<<" "<<id.fs<<" "<<id.se <<"\n"; } } map<int,ll> ().swap(dp[v]); } dp[u][a[u].H + 1] -= a[u].C; ll val = a[u].C; auto it = dp[u].lower_bound(a[u].H + 1); // cout << a[u].H<<"\n"; // cout << u<<" "<<dp[u][1]<<" aa\n"; while (1) { --it; // cout << it->fs<<" "<<it->se<<"\n"; if (it != dp[u].begin() && val >= -it->se) { val += it->se; it = dp[u].erase(it); } else { it->se += val; val = 0; break; } } // dp[u][1] += val; // cout << u <<" "<<dp[u][1] <<" "<<val<<"\n"; } vector<int> zip; void compress () { rep (i, 1, n) zip.push_back(a[i].H); sort (ALL(zip)); zip.resize(unique(ALL(zip)) - zip.begin()); rep (i, 1, n) { a[i].H = lower_bound(ALL(zip), a[i].H) - zip.begin() + 1; } } void solution () { cin >> n; ll tot = 0; rep (i, 1, n) { cin >> a[i].A >> a[i].H >> a[i].C; tot += a[i].C; if (a[i].A != i) ke[a[i].A].push_back(i); } compress(); rep (i, 1, n) { if (a[i].A != i) continue; dfs(i); cout << tot - dp[i][1] <<"\n"; } } #define file(name) freopen(name".inp", "r", stdin); \ freopen(name".out", "w", stdout); int main () { // file("c"); // ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll num_Test = 1; // cin >> num_Test; while(num_Test--) solution(); } /* no bug challenge */

Compilation message (stderr)

worst_reporter2.cpp: In function 'void dfs(int)':
worst_reporter2.cpp:49:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   49 |     if (mxV != -1) swap(dp[u], dp[mxV]); dp[u][1] += 0;
      |     ^~
worst_reporter2.cpp:49:42: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   49 |     if (mxV != -1) swap(dp[u], dp[mxV]); dp[u][1] += 0;
      |                                          ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...