This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define int int64_t
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
using namespace std;
using ar = array<int, 2>;
const int64_t INF = 1ll << 60;
const int N = 2e5 + 5;
vector<ar> adj[N];
int dp, mx[N], up[N], ans[N], n, q;
void dfs_dp(int v, int p) {
for (auto [u, w]: adj[v]) {
dp += (u == p ? w : 0);
}
for (auto [u, w]: adj[v]) if (u != p) {
mx[u] = mx[v] + w;
dfs_dp(u, v);
}
}
void dfs_up(int v, int p) {
for (auto [u, w]: adj[v]) up[v] -= (u == p ? w : 0);
for (auto [u, w]: adj[v]) if (u != p) {
up[u] = up[v] + w;
dfs_up(u, v);
}
}
vector<int> V;
int dfs(int v, int p) {
if (adj[v].size() == 1 && v != p) return 0;
vector<int> ch;
for (auto [u, w]: adj[v]) if (u != p) {
int x = dfs(u, v);
ch.push_back(x + w);
}
sort(ch.begin(), ch.end());
int u = ch.back();
ch.pop_back();
V.insert(V.end(), ch.begin(), ch.end());
return u;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int sum = 0;
cin >> n;
FOR(i, 1, n) {
int u, v, c, d;
cin >> u >> v >> c >> d;
--u, --v;
adj[u].push_back({v, c});
adj[v].push_back({u, d});
sum += c + d;
}
dfs_dp(0, 0);
up[0] = dp;
dfs_up(0, 0);
int rt = max_element(mx, mx + n) - mx;
ans[1] = *max_element(up, up + n);
V.push_back(dfs(rt, rt));
sort(V.rbegin(), V.rend());
int kbig = 0;
FOR(i, 2, n + 1) {
kbig += (i - 2 < V.size() ? V[i - 2] : 0);
ans[i] = up[rt] + kbig;
}
cin >> q;
FOR(i, 0, q) {
int x;
cin >> x;
cout << sum - ans[x] << '\n';
}
return 0;
}
Compilation message (stderr)
designated_cities.cpp: In function 'int main()':
designated_cities.cpp:74:32: warning: comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'std::vector<long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
74 | kbig += (i - 2 < V.size() ? V[i - 2] : 0);
| ~~~~~~^~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |