Submission #667303

#TimeUsernameProblemLanguageResultExecution timeMemory
667303radalFireworks (APIO16_fireworks)C++17
7 / 100
2 ms2680 KiB
#include <bits/stdc++.h> #pragma GCC target("sse,sse2,avx2") #pragma GCC optimize("unroll-loops,O2") #define rep(i,l,r) for (int i = l; i < r; i++) #define repr(i,r,l) for (int i = r; i >= l; i--) #define X first #define Y second #define all(x) (x).begin() , (x).end() #define pb push_back #define endl '\n' #define debug(x) cerr << #x << " : " << x << endl; using namespace std; typedef long long ll; typedef long double ld; typedef pair<int,int> pll; constexpr int N = 1e5+15,mod = 1e9+7; constexpr ll inf = 1e18+10; inline int mkay(int a,int b){ if (a+b >= mod) return a+b-mod; // if (a+b < 0) return a+b+mod; return a+b; } inline int poww(int a,int k){ if (k < 0) return 0; int z = 1; while (k){ if (k&1) z = 1ll*z*a%mod; a = 1ll*a*a%mod; k >>= 1; } return z; } vector<pll> adj[N]; ll h[N],val[N][2]; int n,m; ll x,ans; void pre(int v){ if (v > n) val[v][0] = val[v][1] = h[v]; else{ val[v][1] = -inf; val[v][0] = inf; } for (pll p : adj[v]){ int u = p.X; h[u] = h[v]+p.Y; pre(u); val[v][1] = max(val[v][1],val[u][1]); val[v][0] = min(val[v][0],val[u][0]); } } void dfs(int v,ll tmp){ for (pll p : adj[v]){ int u = p.X; ll calc = 0; if (val[u][0]+tmp > x){ if (p.Y < val[u][0]+tmp-x) calc = -p.Y; else calc = x-tmp-val[u][0]; ans -= calc; tmp += calc; } else if (val[u][1]+tmp < x){ calc = x-val[u][1]-tmp; ans += calc; tmp += calc; } dfs(u,tmp); tmp -= calc; } } int main(){ ios :: sync_with_stdio(0); cin.tie(0); cin >> n >> m; rep(i,2,n+m+1){ int p,w; cin >> p >> w; adj[p].pb({i,w}); } pre(1); ll out = inf; rep(i,n+1,n+m+1){ x = h[i]; ans = 0; dfs(1,0); out = min(ans,out); } cout << out; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...