Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- using ll = long long;
- #define pb emplace_back
- const int maxn = 1e6+10, inf = 1e9;
- #define int ll
- int n, q;
- vector<pair<int,int>> edge[maxn];
- int a[maxn], b[maxn];
- ll sum[maxn];
- ll _cost;
- int x[maxn], y[maxn];
- void dfs(int now, int last = -1) {
- sum[now] = a[now];
- for (auto [u, w] : edge[now]) if (u != last) {
- dfs(u, now);
- sum[now] += sum[u];
- _cost += abs(sum[u]) * w;
- }
- if (!last) assert(sum[now] == 0);
- }
- ll cal(int x, int y, ll m) {
- _cost = 0;
- a[x] += m, a[y] -= m;
- dfs(1);
- a[x] -= m, a[y] += m;
- return _cost;
- }
- ll cost(ll m) {
- if (m == 0) return cal(0, 0, 0);
- ll res = -1;
- for (int i = 0;i < q;++i)
- res = max(res, min(cal(x[i], y[i], m), cal(y[i], x[i], m)));
- assert(res != -1);
- return res;
- }
- void solve() {
- ll res = cost(0), pos = 0, c0 = res;
- for (int i = 1;i <= 1000;++i) {
- ll v = cost(i);
- if (v < res)
- res = v, pos = i;
- }
- cout << pos << ' ' << c0 - res << '\n';
- }
- signed main() {
- ios_base::sync_with_stdio(0), cin.tie(0);
- cin >> n >> q;
- for (int i = 1, a, b, w;i < n;++i) {
- cin >> a >> b >> w;
- edge[a].pb(b, w);
- edge[b].pb(a, w);
- }
- for (int i = 1;i <= n;++i)
- cin >> a[i] >> b[i], a[i] -= b[i];
- for (int i = 0;i < q;++i)
- cin >> x[i] >> y[i];
- solve();
- return 0;
- ll l = 0, r = 2e9, m;
- ll res = cost(0), c0 = res;
- // for (int i = 0;i <= 100;++i)
- // cout << cost(i) << '\n';
- // return 0;
- // for (int i = 0;;++i) {
- // ll v = cost(i+1);
- // if (v > res)
- // break;
- // if (v < res)
- // res = v, l = i+1;
- // }
- while (l < r) {
- m = l + r >> 1;
- ll a = cost(m), b = cost(m+1);
- res = min(res, min(a, b));
- if (a <= b) r = m;
- else l = m+1;
- }
- assert(res <= c0);
- // assert(cost(2e9) >= res);
- // assert(l < inf);
- assert(l == 0 || cost(l-1) > cost(l));
- assert(cost(l) == res);
- cout << l << ' ' << c0-res << '\n';
- }
- /*
- 4 1
- 1 2 1
- 2 3 1
- 3 4 1
- 1 0
- 0 1
- 0 0
- 0 0
- 3 4
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement