Submission #206070

#TimeUsernameProblemLanguageResultExecution timeMemory
206070PeppaPigDesignated Cities (JOI19_designated_cities)C++14
9 / 100
431 ms31236 KiB
#include <bits/stdc++.h> #define long long long #define pii pair<long, long> #define x first #define y second using namespace std; const int N = 2e5+5; struct Edge { int v; long c, d; Edge(int v, long c, long d) : v(v), c(c), d(d) {} }; int n, q, rot, deg[N]; vector<Edge> g[N]; long dwn[N], ans[N]; void pre_process(int u, int p) { for(Edge v : g[u]) if(v.v != p) { pre_process(v.v, u); dwn[u] += v.c + dwn[v.v]; } } void dfs(int u, int p, long sum) { ans[1] = min(ans[1], sum); for(Edge v : g[u]) if(v.v != p) { sum -= v.c, sum += v.d; dfs(v.v, u, sum); sum += v.c, sum -= v.d; } } int main() { ans[1] = 1e18; scanf("%d", &n); for(int i = 1, a, b, c, d; i < n; i++) { scanf("%d %d %d %d", &a, &b, &c, &d); g[a].emplace_back(b, c, d); g[b].emplace_back(a, d, c); ++deg[a], ++deg[b]; } for(int i = 1; i <= n; i++) if(deg[i] != 1) rot = i; pre_process(rot, 0), dfs(rot, 0, dwn[rot]); priority_queue<pii, vector<pii>, greater<pii> > Q; for(int i = 1; i <= n; i++) if(deg[i] == 1) Q.emplace(g[i][0].d, i); while(Q.size() > 2) { pii now = Q.top(); Q.pop(); int u = now.y; long dist = now.x; int nex = -1; for(Edge v : g[u]) if(deg[v.v] > 1) { --deg[v.v]; if(deg[v.v] == 1) nex = v.v; else ans[Q.size()] = ans[Q.size() + 1] + dist; } if(nex != -1) for(Edge v : g[nex]) if(deg[v.v] > 1) Q.emplace(dist + v.d, nex); } scanf("%d", &q); for(int i = 1, a; i <= q; i++) { scanf("%d", &a); printf("%lld\n", ans[a]); } return 0; }

Compilation message (stderr)

designated_cities.cpp: In function 'int main()':
designated_cities.cpp:42:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &n);
     ~~~~~^~~~~~~~~~
designated_cities.cpp:44:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d %d %d", &a, &b, &c, &d);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
designated_cities.cpp:69:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &q);
     ~~~~~^~~~~~~~~~
designated_cities.cpp:71:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &a);
         ~~~~~^~~~~~~~~~
#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...