Submission #1060245

#TimeUsernameProblemLanguageResultExecution timeMemory
1060245aymanrsNestabilnost (COI23_nestabilnost)C++17
12 / 100
1515 ms63872 KiB
#include<bits/stdc++.h> using namespace std; vector<int> cost, mic;int N; struct node { vector<long long> dp; long long lock=-1,free = -1,lockn=-1; vector<node*> l; int a; }; // void dfs(node* n, node* p){ // for(node* c : n->l) if(c!=p) dfs(c,n); // n->dp.resize(N+1); // n->free = LONG_LONG_MAX; // for(int k = n->a+1;k <= N;k++){ // n->dp[k] = cost[k]; // for(node* c : n->l){ // if(c==p) continue; // if(!c->a){ // if(k == n->a+1) n->dp[k] += min(c->dp[k]-cost[k], c->free); // else n->dp[k] += c->free; // } else if(c->a == n->a+1){ // if(k>c->a) n->dp[k] += min(c->dp[k]-cost[k], c->free); // else n->dp[k] += c->free; // } else n->dp[k] += c->free; // } // n->free = min(n->free, n->dp[k]); // } // } long long dfs(node* n, node* p, int l, int r){ if(l==r && r<N && n->lock != -1) return n->lock; if(l==1&&r==N&&n->free != -1) return n->free; if(l==N&&r==N&&n->lockn!=-1) return n->lockn; long long ans = LONG_LONG_MAX; for(node* c : n->l) if(c!=p) { if(!c->a&&l<=n->a+1&&n->a+1<=r){ ans = dfs(c, n, n->a+1,n->a+1); } else if(c->a == n->a+1&&r > c->a){ ans = dfs(c, n, max(l,c->a+1),r); if(r == N) goto thi; } if(l==r) ans = min(ans,cost[l]+dfs(c,n, 1, N)); else ans = min(ans,mic[l]+dfs(c,n,1,N)); } if(ans==LONG_LONG_MAX) { if(l==r) ans = cost[l]; else ans = mic[l]; } thi: if(l==r&&r<N) n->lock=ans; if(l==1&&r==N) n->free=ans; if(l==N&&r==N) n->lockn=ans; return ans; } void solve(){ int n;cin >> n; N=n; node g[n+1]; cost.resize(n+1); mic.resize(n+1); for(int i = 1;i <= n;i++) cin >> g[i].a; for(int i = 1;i <= n;i++) cin >> cost[i]; for(int i = n;i >= 1;i--){ mic[i] = cost[i]; if(i < n) mic[i] = min(mic[i],mic[i+1]); } for(int i = 0;i < n-1;i++){ int u,v;cin >> u >> v; g[u].l.push_back(&g[v]); g[v].l.push_back(&g[u]); } cout << dfs(&g[1], NULL, 1, N) << '\n'; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...