Submission #1175657

#TimeUsernameProblemLanguageResultExecution timeMemory
117565712345678Designated Cities (JOI19_designated_cities)C++20
7 / 100
126 ms35572 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int nx=2e5+5; ll n, q, u, v, a, b, used[nx], deg[nx], res[nx], up[nx], dn[nx], sm; vector<tuple<ll ,ll, ll>> d[nx]; priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>> pq; void dfs(int u, int p) { for (auto [v, a, b]:d[u]) { if (v==p) continue; up[v]=up[u]+b; dn[v]=dn[u]+a; sm+=a; dfs(v, u); } } int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n; for (int i=1; i<n; i++) cin>>u>>v>>a>>b, d[u].push_back({v, a, b}), d[v].push_back({u, b, a}), deg[u]++, deg[v]++; for (int i=1; i<=n; i++) if (deg[i]==1) pq.push({0, i}); while (pq.size()>2) { auto [w, u]=pq.top(); pq.pop(); used[u]=1; for (auto [v, a, b]:d[u]) { if (!used[v]) { w+=b; u=v; break; } } if (--deg[u]==1) pq.push({w, u}); else res[pq.size()]=res[pq.size()+1]+w; } dfs(1, 1); res[1]=1e18; for (int i=1; i<=n; i++) res[1]=min(res[1], sm+up[i]-dn[i]); cin>>q; while (q--) cin>>u, cout<<res[u]<<'\n'; }
#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...