제출 #1323282

#제출 시각아이디문제언어결과실행 시간메모리
1323282escobrandDesignated Cities (JOI19_designated_cities)C++20
0 / 100
1 ms428 KiB
#include <bits/stdc++.h> using namespace std; #define all(v) v.begin(),v.end() #define pb push_back #define ll long long #define ld long double #define fi first #define se second #define mk make_pair typedef pair<int,int> pii; struct Edge { int u,v; int w[2]; int find_node(int i) { return (i==u?v:u);} bool find_dir(int i) { return (i==u?0:1);} Edge(int _u,int _v,int _r,int _l) : u(_u),v(_v) { w[0] = _r; w[1] = _l; } }; const int maxn = 2e3 + 10; vector<int> adj[maxn]; vector<Edge>edges; ll dp[maxn][maxn],TOTAL,ans[maxn],c[maxn],sub[maxn]; int s[maxn]; int n; void prep(int i,int pa) { for(int id : adj[i]) { int k = edges[id].find_node(i); if(k==pa)continue; bool dir = edges[id].find_dir(i); prep(k,i); sub[i] += sub[k] + edges[id].w[dir^1]; } } void cal(int i,int pa,ll carry) { c[i] = carry; carry += sub[i]; for(int id : adj[i]) { int k = edges[id].find_node(i); if(k==pa)continue; bool dir = edges[id].find_dir(i); cal(k,i,carry - edges[id].w[dir^1] + edges[id].w[dir] - sub[k]); } } void dfs(int i,int pa) { s[i] = 1; for(int id : adj[i]) { int k = edges[id].find_node(i); if(k==pa)continue; bool dir = edges[id].find_dir(i); dfs(k,i); int tmp = edges[id].w[0] + edges[id].w[1]; for(int l = s[i];l>=0;l--) { for(int r = s[k];r;r--) { dp[i][l+r] = max(dp[i][l+r],dp[i][l] + dp[k][r] + tmp); if(l) ans[l+r] = max(ans[l+r],dp[i][l] + dp[k][r] + tmp + c[i]); } dp[i][l] += dp[k][0] + edges[id].w[dir^1]; } s[i] += s[k]; } ans[1] = max(ans[1],sub[i] + c[i]); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i = 1,u,v,r,l;i<n;i++) { cin>>u>>v>>r>>l; adj[u].pb(edges.size()); adj[v].pb(edges.size()); edges.emplace_back(u,v,r,l); TOTAL += r + l; } prep(1,0); cal(1,0,0); dfs(1,0); int t; cin>>t; while(t--) { int i; cin>>i; cout<<TOTAL-ans[i]<<'\n'; } return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...