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"
using namespace std;
const int maxn = 2e5 + 5;
const int lg = 19;
int n, ca[maxn], cb[maxn];
vector<int> g[maxn];
int edge_u[maxn], edge_v[maxn], edge_ca[maxn], edge_cb[maxn];
int par[maxn];
int h[maxn];
int f[maxn];
int up[maxn][lg + 1];
void pre_dfs(int u, int prev) {
  for(auto v:g[u]) {
    if(v == prev) continue;
    par[v] = u;
    up[v][0] = u;
    h[v] = h[u] + 1;
    for(int i = 1; i <= lg; ++i) {
      up[v][i] = up[up[v][i - 1]][i - 1];
    }
    pre_dfs(v, u);
  }
}
int lca(int u, int v) {
  if(h[u] < h[v]) swap(u, v);
  for(int i = lg; i >= 0; --i) {
    if((h[u] - h[v]) >> i & 1) u = up[u][i];
  }
  if(u == v) return u;
  for(int i = lg; i >= 0; --i) {
    if(up[u][i] != up[v][i]) {
      u = up[u][i], v = up[v][i];
    }
  }
  return up[u][0];
}
void dfs(int u, int prev) {
  for(auto v:g[u]) {
    if(v == prev) continue;
    dfs(v, u);
    f[u] += f[v];
  }
}
void solve() {
  cin >> n;
  for(int i = 1; i < n; ++i) {
    int u, v, ca, cb; cin >> u >> v >> ca >> cb;
    g[u].push_back(v);
    g[v].push_back(u);
    edge_u[i] = u, edge_v[i] = v;
    edge_ca[i] = ca, edge_cb[i] = cb;
  }
  pre_dfs(1, 0);
  for(int i = 1; i < n; ++i) {
    int u = edge_u[i], v = edge_v[i];
    if(par[u] == v) swap(u, v);
    ca[v] = edge_ca[i], cb[v] = edge_cb[i];
  }
  for(int i = 1; i < n; ++i) {
    int u = i, v = i + 1;
    int l = lca(u, v);
    ++f[u], ++f[v];
    f[l] -= 2;
  }
  dfs(1, 0);
  long long ans = 0;
  for(int i = 2; i <= n; ++i) {
    ans += min(1ll * f[i] * ca[i], 1ll * cb[i]);
  }
  cout << ans;
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  
  solve();
  return 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... |