Submission #667326

#TimeUsernameProblemLanguageResultExecution timeMemory
667326radalFireworks (APIO16_fireworks)C++17
19 / 100
23 ms1076 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 = 3e2+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 dp[N][N]; 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){ for (auto [u,w] : adj[v]) dfs(u); rep(i,0,N){ if (v > n && i){ dp[v][i] = inf; continue; } dp[v][i] = 0; for (auto [u,w] : adj[v]){ if (val[u][0] == inf) continue; ll mi = inf; rep(j,0,i+1){ ll cost; if (j+w <= i) cost = i-j-w; else cost = j+w-i; mi = min(mi,dp[u][j]+cost); } dp[v][i] += mi; } } } 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; dfs(1); rep(i,0,N) out = min(out,dp[1][i]); 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...