제출 #925539

#제출 시각아이디문제언어결과실행 시간메모리
925539NK_Putovanje (COCI20_putovanje)C++17
110 / 110
128 ms28756 KiB
// Success consists of going from failure to failure without loss of enthusiasm #include <bits/stdc++.h> using namespace std; #define nl '\n' #define pb push_back #define f first #define s second #define mp make_pair using ll = long long; template<class T> using V = vector<T>; using pi = pair<int,int>; using vi = V<int>; using vpi = V<pi>; const int MOD = 1e9 + 7; const int LG = 19; int main() { cin.tie(0)->sync_with_stdio(0); int N; cin >> N; vi W(N - 1), MW(N - 1); V<vpi> adj(N); for(int i = 0; i < N - 1; i++) { int u, v; cin >> u >> v; --u, --v; cin >> W[i] >> MW[i]; adj[u].pb(mp(v, i)); adj[v].pb(mp(u, i)); } V<vi> up(N, vi(LG)); vi idx(N, -1), dep(N, 0); function<void(int, int)> gen = [&](int u, int p) { up[u][0] = p; for(int i = 1; i < LG; i++) up[u][i] = up[up[u][i-1]][i-1]; for(auto& e : adj[u]) { int v, i; tie(v, i) = e; if (v == p) continue; idx[v] = i; dep[v] = dep[u] + 1; gen(v, u); } }; gen(0, 0); auto jmp = [&](int u, int d) { for(int i = 0; i < LG; i++) if ((d >> i) & 1) u = up[u][i]; return u; }; auto lca = [&](int a, int b) { if (dep[a] < dep[b]) swap(a, b); a = jmp(a, dep[a] - dep[b]); if (a == b) return a; for(int i = LG - 1; i >= 0; i--) { if (up[a][i] != up[b][i]) { a = up[a][i], b = up[b][i]; } } return up[a][0]; }; vi BAL(N); for(int i = 0; i + 1 < N; i++) { // path from i to i + 1 int l = lca(i, i + 1); // cerr << i << " " << i + 1 << " ==> " << l << endl; BAL[i]++, BAL[i + 1]++; BAL[l] -= 2; } ll ans = 0; function<int(int, int)> dfs = [&](int u, int p) { int bal = 0; for(auto& e : adj[u]) { int v, i; tie(v, i) = e; if (v == p) continue; bal += dfs(v, u); } bal += BAL[u]; // cerr << u << " => " << bal << endl; if (idx[u] != -1) { int i = idx[u]; ans += min(W[i] * 1LL * bal, MW[i] + 0LL); } return bal; }; dfs(0, -1); cout << ans << nl; exit(0-0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...