Submission #897374

#TimeUsernameProblemLanguageResultExecution timeMemory
897374NeroZeinDesignated Cities (JOI19_designated_cities)C++17
16 / 100
188 ms43312 KiB
#include "bits/stdc++.h" using namespace std; #ifdef Nero #include "Deb.h" #else #define deb(...) #endif const int N = 2e5 + 5; long long f[N]; long long ans[N]; long long dist[N]; vector<pair<int, int>> g[N]; pair<long long, long long> dp[N]; void dfs1(int v, int p) { long long mx = 0, mx2 = 0; for (auto [u, w] : g[v]) { if (u == p) continue; dist[1] += w; dfs1(u, v); mx2 = max(mx2, dp[u].first + w); if (mx2 > mx) swap(mx, mx2); } dp[v] = make_pair(mx, mx2); } void dfs2(int v, int p, long long up) { auto [mx, mx2] = dp[v]; for (auto [u, w] : g[v]) { if (u == p) { dist[v] += w; up += w; } } f[v] = max(mx, up); for (auto [u, w] : g[v]) { if (u == p) continue; dist[u] = dist[v] - w; long long nup = (mx == dp[u].first + w ? mx2 : mx); nup = max(up, nup); dfs2(u, v, nup); } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; for (int i = 1; i < n; ++i) { int u, v, c, d; cin >> u >> v >> c >> d; g[u].emplace_back(v, c); g[v].emplace_back(u, d); } dfs1(1, 0); dfs2(1, 0, 0); ans[1] = *min_element(dist + 1, dist + 1 + n); ans[2] = LLONG_MAX; dist[0] = LLONG_MAX; int r = 0; for (int i = 1; i <= n; ++i) { if (dist[i] - f[i] < dist[r] - f[r]) { r = i; } } ans[2] = dist[r] - f[r]; int q; cin >> q; while (q--) { int e; cin >> e; cout << ans[e] << '\n'; } return 0; }
#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...