Submission #1276109

#TimeUsernameProblemLanguageResultExecution timeMemory
1276109chanhchuong123Putovanje (COCI20_putovanje)C++20
110 / 110
91 ms21412 KiB
#include <bits/stdc++.h> using namespace std; #define task "friend" const int MAX = 200020; int n; int h[MAX]; int dp[MAX]; int anc[18][MAX]; vector<int> adj[MAX]; struct Edge { int a, b, c, d; Edge(int _a = 0, int _b = 0, int _c = 0, int _d = 0) { a = _a; b = _b; c = _c; d = _d; } } edges[MAX]; void dfs(int u, int p) { for (int v: adj[u]) if (v != p) { h[v] = h[u] + 1; anc[0][v] = u; for (int j = 1; j <= 17; ++j) { anc[j][v] = anc[j - 1][anc[j - 1][v]]; } dfs(v, u); } } int lca(int u, int v) { if (h[u] < h[v]) swap(u, v); int k = h[u] - h[v]; for (int j = 0; (1 << j) <= k; ++j) { if (k >> j & 1) u = anc[j][u]; } if (u == v) return u; for (int j = 17; j >= 0; --j) { if (anc[j][u] != anc[j][v]) { u = anc[j][u]; v = anc[j][v]; } } return anc[0][u]; } void reDfs(int u, int p) { for (int v: adj[u]) if (v != p) { reDfs(v, u); dp[u] += dp[v]; } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); if (fopen(task".inp", "r")) { freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); } cin >> n; for (int i = 1; i < n; ++i) { int a, b, c, d; cin >> a >> b >> c >> d; edges[i] = Edge(a, b, c, d); adj[a].push_back(b); adj[b].push_back(a); } dfs(1, -1); for (int i = 2; i <= n; ++i) { int p = lca(i - 1, i); dp[i - 1] += 1; dp[i] += 1; dp[p] -= 2; } reDfs(1, -1); long long ans = 0; for (int i = 1; i < n; ++i) { int a = edges[i].a, b = edges[i].b, c = edges[i].c, d = edges[i].d; if (h[a] > h[b]) swap(a, b); ans += min(1LL * dp[b] * c, 1LL * d); } cout << ans; return 0; }

Compilation message (stderr)

putovanje.cpp: In function 'int main()':
putovanje.cpp:61:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   61 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
putovanje.cpp:62:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...