Submission #1175880

#TimeUsernameProblemLanguageResultExecution timeMemory
1175880WarinchaiDesignated Cities (JOI19_designated_cities)C++20
100 / 100
303 ms41124 KiB
#include<bits/stdc++.h> #define int long long using namespace std; int inf=1e18; vector<pair<int,pair<int,int>>>adj[200005]; priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq; int val[200005]; int sum[200005]; int tans[200005]; int ans[200005]; int used[200005]; int all=0; void dfs(int u,int p){ for(auto x:adj[u]){ if(x.first==p)val[u]+=x.second.first,sum[u]-=x.second.first; else{ dfs(x.first,u); val[u]+=val[x.first]; } } sum[u]+=val[u]; } void reroot(int u,int p,int ans){ //cerr<<u<<" "<<sum[u]<<" "<<ans<<"\n"; tans[u]=sum[u]+ans; for(auto x:adj[u]){ if(x.first!=p)reroot(x.first,u,ans+sum[u]-val[x.first]+x.second.first); } } int deg[200005]; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n;cin>>n; for(int i=1;i<n;i++){ int a,b,c,d;cin>>a>>b>>c>>d; adj[a].push_back({b,{c,d}}); adj[b].push_back({a,{d,c}}); deg[a]++,deg[b]++; all+=c+d; } int q;cin>>q; dfs(1,0); reroot(1,0,0); for(int i=1;i<=n;i++)if(deg[i]==1)pq.push({adj[i][0].second.second,i}); while(!pq.empty()){ int cost=pq.top().first; int x=pq.top().second; //cerr<<x<<"\n"; pq.pop(); used[x]=1; int nxt; for(auto v:adj[x])if(!used[v.first])nxt=v.first; if(--deg[nxt]==1){ int e=0; for(auto v:adj[nxt])if(!used[v.first])e=v.second.second; pq.push({cost+e,nxt}); }else{ //cerr<<"del:"<<cost<<"\n"; ans[pq.size()]=ans[pq.size()+1]+cost; } } ans[1]=inf; for(int i=1;i<=n;i++){ ans[1]=min(ans[1],all-tans[i]); } for(int i=0;i<q;i++){ int x;cin>>x; cout<<ans[x]<<"\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...