Submission #786642

#TimeUsernameProblemLanguageResultExecution timeMemory
786642Dan4LifeDesignated Cities (JOI19_designated_cities)C++17
6 / 100
2078 ms11548 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pb push_back #define sz(a) (int)a.size() const int mxN = (int)1e5+10; int n, q, ans[mxN]; vector<array<int,2>> adj[mxN], tadj[mxN]; void rem(int s, int p){ for(auto &[u,c] : adj[s]){ if(u==p) continue; c = 0; rem(u,s); } } int32_t main() { cin >> n; int tot = 0; memset(ans,63,sizeof(ans)); for(int i = 0; i < n-1; i++){ int a, b, c, d; cin >> a >> b >> c >> d; a--,b--,swap(c,d); tot+=c+d; adj[a].pb({b,c}); adj[b].pb({a,d}); tadj[a].pb({b,c}); tadj[b].pb({a,d}); } for(int mask = 0; mask < (1<<n); mask++){ int sum = 0; for(int i = 0; i < n; i++){ adj[i].clear(); for(auto u : tadj[i]) adj[i].pb(u); } for(int i = 0; i < n; i++) if((mask>>i)&1) rem(i,-1); for(int i = 0; i < n; i++) for(auto [b,c] : adj[i]) sum+=c; int x = __builtin_popcountll(mask); ans[x] = min(ans[x], sum); } cin >> q; while(q--){ int x; cin >> x,cout << ans[x] << "\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...