Submission #1033422

#TimeUsernameProblemLanguageResultExecution timeMemory
10334221L1YADesignated Cities (JOI19_designated_cities)C++17
100 / 100
309 ms71764 KiB
//1L1YA #include<bits/stdc++.h> using namespace std; //#pragma GCC optimize ("O3,unrool-loops") //#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") typedef long long ll; typedef pair<ll,ll> pll; typedef pair<int,int> pii; #define Pb push_back #define F first #define S second #define endl '\n' #define sep ' ' #define all(x) x.begin(),x.end() #define al(x,n) x+1,x+n+1 #define SZ(x) ((int)x.size()) #define lc (id<<1) #define rc (lc|1) #define mid (l+r>>1) #define dokme(x) cout << x << endl, exit(0) #define sik(x) cout << x << endl;continue; #define FastIO ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout); mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const ll oo=1e18; const int mod=1e9+7; const int inf=1e9+111; const int N=2e5+11; const int lg=23; ll n,s,q,t=1,mx=1,a[N],d[N],dp[N],st[N],et[N],val[N],par[N],ans[N],lz[N<<2]; pll seg[N<<2]; vector<pii> G1[N],G2[N]; bool mark[N]; void dfs1(int v,int p=0){ if(d[v]>d[mx]) mx=v; for(auto [u,w]: G1[v]) if(u!=p){ d[u]=d[v]+w; dfs1(u,v); dp[v]+=dp[u]+w; } } void dfs2(int v,int p=0){ ans[1]=min(ans[1],dp[v]); for(auto [u,w]: G2[v]) if(u!=p){ dp[u]=dp[v]+w; dfs2(u,v); } } void dfs3(int v,int p=0){ a[t]=v;st[v]=t++; for(auto [u,w]: G1[v]) if(u!=p){ val[u]=w; par[u]=v; d[u]=d[v]+w; dfs3(u,v); s+=w; } et[v]=t; } void build(int id=1,int l=1,int r=n+1){ if(r-l==1){ seg[id]={d[a[l]],a[l]}; return; } build(lc,l,mid); build(rc,mid,r); seg[id]=max(seg[lc],seg[rc]); } void shift(int id){ seg[lc].F+=lz[id];lz[lc]+=lz[id]; seg[rc].F+=lz[id];lz[rc]+=lz[id]; lz[id]=0; } void update(int ql,int qr,int val,int id=1,int l=1,int r=n+1){ if(qr<=l || ql>=r) return; if(ql<=l && r<=qr){ seg[id].F+=val; lz[id]+=val; return; } shift(id); update(ql,qr,val,lc,l,mid); update(ql,qr,val,rc,mid,r); seg[id]=max(seg[lc],seg[rc]); } int main(){ FastIO cin >> n; for(int i=1;i<n;i++){ int u,v,a,b; cin >> u >> v >> a >> b; G1[u].Pb({v,a}); G1[v].Pb({u,b}); G2[u].Pb({v,b-a}); G2[v].Pb({u,a-b}); } dfs1(1); ans[1]=oo; dfs2(1); mark[mx]=1;d[mx]=0; dfs3(mx); build(); for(int i=2;i<=n;i++){ int v=seg[1].S; s-=seg[1].F; while(!mark[v]){ mark[v]=1; update(st[v],et[v],-val[v]); v=par[v]; } ans[i]=s; } cin >> q; while(q--){ int i;cin >> i; cout << ans[i] << endl; } return 0; }

Compilation message (stderr)

designated_cities.cpp: In function 'void build(int, int, int)':
designated_cities.cpp:23:27: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   23 | #define mid             (l+r>>1)
      |                          ~^~
designated_cities.cpp:79:13: note: in expansion of macro 'mid'
   79 |  build(lc,l,mid);
      |             ^~~
designated_cities.cpp:23:27: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   23 | #define mid             (l+r>>1)
      |                          ~^~
designated_cities.cpp:80:11: note: in expansion of macro 'mid'
   80 |  build(rc,mid,r);
      |           ^~~
designated_cities.cpp: In function 'void update(int, int, int, int, int, int)':
designated_cities.cpp:23:27: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   23 | #define mid             (l+r>>1)
      |                          ~^~
designated_cities.cpp:98:24: note: in expansion of macro 'mid'
   98 |  update(ql,qr,val,lc,l,mid);
      |                        ^~~
designated_cities.cpp:23:27: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   23 | #define mid             (l+r>>1)
      |                          ~^~
designated_cities.cpp:99:22: note: in expansion of macro 'mid'
   99 |  update(ql,qr,val,rc,mid,r);
      |                      ^~~
#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...