Submission #232856

#TimeUsernameProblemLanguageResultExecution timeMemory
232856oolimryDesignated Cities (JOI19_designated_cities)C++14
100 / 100
423 ms38936 KiB
#include <bits/stdc++.h> #define int long long #define cost first #define u second using namespace std; typedef pair<int,int> ii; struct edge { int to, cost, rev; }; vector<edge> adj[200005]; int degree[200005]; int flipDist[200005]; int total = 0; bool gone[200005]; int ans[200005]; void dfs(int u, int p){ for(edge e : adj[u]){ if(e.to == p) continue; total += e.cost; flipDist[e.to] = flipDist[u] - e.cost + e.rev; dfs(e.to, u); } } ii findParent(int u){ for(edge e : adj[u]){ if(!gone[e.to]) return ii(e.rev, e.to); } } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; for(int i = 1;i < n;i++){ int a, b, c, d; cin >> a >> b >> c >> d; adj[a].push_back({b,c,d}); adj[b].push_back({a,d,c}); degree[a]++; degree[b]++; } ///solve the E = 1 case dfs(1,0); ans[1] = total + *min_element(flipDist + 1, flipDist + n+1); ///Other cases priority_queue<ii, vector<ii>, greater<ii> > leaves; for(int i = 1;i <= n;i++){ if(degree[i] == 1) leaves.push(ii(findParent(i).cost, i)); } while((int) leaves.size() > 2){ int u = leaves.top().u; int cost = leaves.top().cost; leaves.pop(); gone[u] = true; int p = findParent(u).second; degree[p]--; if(degree[p] == 1){ leaves.push(ii(findParent(p).cost + cost, p)); } else{ ans[(int) leaves.size()] = ans[(int) leaves.size()+1] + cost; } } int Q; cin >> Q; while(Q--){ int x; cin >> x; cout << ans[x] << "\n"; } }

Compilation message (stderr)

designated_cities.cpp: In function 'ii findParent(long long int)':
designated_cities.cpp:30:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#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...