Submission #336503

#TimeUsernameProblemLanguageResultExecution timeMemory
336503YJUDesignated Cities (JOI19_designated_cities)C++14
16 / 100
282 ms51948 KiB
#include<bits/stdc++.h> #pragma GCC optimize("unroll-loops,no-stack-protector") using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll,ll> pll; const ll MOD=1e9+7; const ll MOD2=998244353; const ll N=2e5+5; const ld pi=3.14159265359; const ll INF=(1LL<<60); #define SQ(i) ((i)*(i)) #define REP(i,n) for(ll i=0;i<n;i++) #define REP1(i,n) for(ll i=1;i<=n;i++) #define pb push_back #define mp make_pair #define X first #define Y second #define setp setprecision #define lwb lower_bound #define SZ(_a) (ll)_a.size() ll n,x,wa,wb,y,ans[N],down[N],fr[N],fn[N],dsum,q,sub[N][2]; vector<pair<ll,pll> > v[N]; void dfs1(ll nd,ll Parent){ sub[nd][0]=sub[nd][1]=down[nd]=nd; for(auto i:v[nd]){ if(i.X==Parent)continue; fn[i.X]=fn[nd]+i.Y.Y; fr[i.X]=fr[nd]+i.Y.X; dsum+=i.Y.X; dfs1(i.X,nd); down[nd]=(fr[down[i.X]]>fr[down[nd]]?down[i.X]:down[nd]); ll id=down[i.X]; if(fr[sub[nd][0]]<=fr[id])swap(id,sub[nd][0]); if(fr[sub[nd][1]]<=fr[id])swap(id,sub[nd][1]); } } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); cin>>n; REP(i,n-1){ cin>>x>>y>>wa>>wb; v[x].pb(mp(y,mp(wa,wb))); v[y].pb(mp(x,mp(wb,wa))); } dfs1(1,0); REP1(i,n)ans[i]=INF; REP1(i,n){ ans[1]=min(ans[1],dsum+fn[i]-fr[i]); ans[2]=min(ans[2],dsum+fn[i]-fr[i]-(fr[sub[i][0]]+fr[sub[i][1]]-2*fr[i])); } cin>>q; while(q--){ cin>>x; cout<<ans[x]<<"\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...