Submission #479781

#TimeUsernameProblemLanguageResultExecution timeMemory
479781sam571128Fireworks (APIO16_fireworks)C++17
26 / 100
28 ms2456 KiB
#include <bits/stdc++.h> #define int long long #define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); using namespace std; const int N = 605, M = 305; vector<pair<int,int>> adj[N]; int dp[N][M], val[N][M]; void dfs(int u, int p){ if(adj[u].size()==1&&u!=1){ dp[u][0] = 0; } for(auto [v,w] : adj[u]){ if(v == p) continue; dfs(v,u); fill(val[u],val[u]+M,1e18); for(int i = 0;i < M;i++){ for(int j = 0;j <= i;j++){ val[u][i] = min(val[u][i], abs(w-(i-j))+dp[v][j]); } } for(int i = 0;i < M;i++){ if(dp[u][i]==1e18) dp[u][i] = 0; dp[u][i] += val[u][i]; } } } signed main(){ //fastio int n,m; cin >> n >> m; if(n==1){ vector<int> tmp; for(int i = 0;i < m;i++){ int a,x; cin >> a >> x; tmp.push_back(x); } sort(tmp.begin(),tmp.end()); int to = tmp[tmp.size()/2]; int ans = 0; for(auto x : tmp){ ans += abs(x-to); } cout << ans << "\n"; }else{ for(int i = 2;i <= n;i++){ int p,x; cin >> p >> x; adj[p].push_back({i,x}); adj[i].push_back({p,x}); } for(int i = 1;i <= m;i++){ int p,x; cin >> p >> x; adj[p].push_back({i+n,x}); adj[i+n].push_back({p,x}); } fill(&dp[0][0],&dp[N-1][M-1],1e18); dfs(1,1); cout << *min_element(dp[1],dp[1]+M) << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...