Submission #105925

#TimeUsernameProblemLanguageResultExecution timeMemory
105925KepperoniDesignated Cities (JOI19_designated_cities)C++14
0 / 100
1847 ms61280 KiB
#include <bits/stdc++.h> #define x first #define y second #define pb push_back using namespace std; typedef long long ll; typedef pair<int, int> pii; const int MAXN = 2e5 + 10; int n; map<pii, ll> ma; vector<int> k[MAXN]; int root = 1; int cfr[MAXN], cto[MAXN], wh[MAXN]; ll ans[MAXN]; int par[MAXN]; bool vis[MAXN]; ll lz[MAXN*4], sum[MAXN*4], wma[MAXN*4]; void prop(int v){ if(lz[v] != 0){ sum[v] += lz[v]; lz[v*2] += lz[v]; lz[v*2+1] += lz[v]; lz[v] = 0; } } void init(int v, int le, int ri){ wma[v] = wh[le]; if(le != ri){ int mid = (le+ri)/2; init(v*2, le, mid); init(v*2+1, mid+1, ri); } } void ch(int v, int le, int ri, int fr, int to, ll mucho){ prop(v); //cout << le << " " << ri << " " << fr << " " << to << endl; if(ri < fr || le > to) return; else if(fr <= le && ri <= to){ lz[v] += mucho; prop(v); return; } ch(v*2, le, (le+ri)/2, fr, to, mucho); ch(v*2+1, (le+ri)/2+1, ri, fr, to, mucho); if(sum[v*2] > sum[v*2+1]) sum[v] = sum[v*2], wma[v] = wma[v*2]; else sum[v] = sum[v*2+1], wma[v] = wma[v*2+1]; } int ctim = 1; void dfs(int v, int p = 0){ par[v] = p; wh[ctim] = v; cfr[v] = ctim++; for(auto x : k[v]) if(x != p) dfs(x, v); cto[v] = ctim-1; } ll locans[MAXN]; void srch(int v, ll cu, int p=0){ //cout << v << " " << cu << endl; locans[v] = cu; for(auto x : k[v]) if(x != p) srch(x, cu - ma[pii(v, x)] + ma[pii(x, v)], v); } int main(){ scanf(" %d", &n); for(int i=1; i<n; i++){ int ca, cb, cc, cd; scanf(" %d %d %d %d", &ca, &cb, &cc, &cd); ma[pii(ca, cb)] = cc; ma[pii(cb, ca)] = cd; k[ca].pb(cb); k[cb].pb(ca); } if(k[root].size() == 1) for(auto x : k[root]) if(k[x].size() != 1){ root = x; break; } dfs(root); init(1, 1, n); ll curpay = 0; for(int i=1; i<=n; i++) if(par[i] != 0){ curpay += ma[pii(par[i], i)]; ch(1, 1, n, cfr[i], cto[i], ma[pii(par[i], i)]); } srch(root, curpay); for(int i=1; i<=n; i++){ prop(1); if(curpay != 0){ int cans = wma[1]; curpay -= sum[1]; while(cans != 1 && !vis[cans]){ vis[cans] = true; ch(1, 1, n, cfr[cans], cto[cans], -ma[pii(par[cans], cans)]); cans = par[cans]; } ans[i] = curpay; } } ans[1] = 1e16; for(int i=1; i<=n; i++) ans[1] = min(ans[1], locans[i]); int q; scanf(" %d", &q); while(q--){ int e; scanf(" %d", &e); printf("%lld\n", ans[e]); } }

Compilation message (stderr)

designated_cities.cpp: In function 'int main()':
designated_cities.cpp:83:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf(" %d", &n);
  ~~~~~^~~~~~~~~~~
designated_cities.cpp:85:28: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int ca, cb, cc, cd; scanf(" %d %d %d %d", &ca, &cb, &cc, &cd);
                       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
designated_cities.cpp:131:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  int q; scanf(" %d", &q);
         ~~~~~^~~~~~~~~~~
designated_cities.cpp:133:15: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int e; scanf(" %d", &e);
          ~~~~~^~~~~~~~~~~
#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...