Submission #207563

#TimeUsernameProblemLanguageResultExecution timeMemory
207563quocnguyen1012Designated Cities (JOI19_designated_cities)C++14
100 / 100
428 ms35064 KiB
#include <bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; const int maxn = 2e5 + 5; class Edge { public: int v, c, d; Edge(int v, int c, int d): v(v), c(c), d(d) {} }; vector<Edge> adj[maxn]; int N, M, deg[maxn]; ll res[maxn], sum[maxn]; void prepare(int u, int p = -1) { for(auto v : adj[u]) if(v.v != p){ prepare(v.v, u); sum[u] += v.c + sum[v.v]; } } void down(int u, int p, ll s) { res[1] = min(res[1], s); for(auto v : adj[u]) if(v.v != p){ down(v.v, u, s - v.c + v.d); } } signed main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if(fopen("A.INP", "r")){ freopen("A.INP", "r", stdin); freopen("A.OUT", "w", stdout); } cin >> N; for(int i = 1; i < N; ++i){ int a, b, c, d; cin >> a >> b >> c >> d; adj[a].eb(b, c, d); adj[b].eb(a, d, c); ++deg[a]; ++deg[b]; } res[1] = 1e18; prepare(1); down(1, -1, sum[1]); priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq; for(int i = 1; i <= N; ++i){ if(adj[i].size() == 1) pq.push(mp(adj[i][0].d, i)); } while(pq.size() > 2){ auto now = pq.top(); pq.pop(); int nxt = -1, cnt = 0; for(auto v : adj[now.se]){ if(deg[v.v] > 1){ deg[v.v]--; if(deg[v.v] == 1) nxt = v.v, ++cnt; else res[pq.size()] = res[pq.size() + 1] + now.fi; } } assert(cnt <= 1); if(nxt != -1) for(auto v : adj[nxt]) if(deg[v.v] > 1) pq.push(mp(now.fi + v.d, nxt)); } int q; cin >> q; while(q--){ int x; cin >> x; cout << res[x] << '\n'; } }

Compilation message (stderr)

designated_cities.cpp: In function 'int main()':
designated_cities.cpp:45:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
     freopen("A.INP", "r", stdin);
     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
designated_cities.cpp:46:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
     freopen("A.OUT", "w", stdout);
     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#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...