/*
Problem: https://oj.uz/problem/view/COCI20_putovanje
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define dbg(x) cerr << #x << " " << x << "\n"
const int N = 2e5, LG = 20;
struct Edge {
int x;
int y;
int c1;
int c2;
};
Edge e[1 + N];
int p[LG][1 + N];
int d[1 + N];
vector <pair <int, int>> gr[1 + N];
void dfs (int node, int f) {
p[0][node] = f;
d[node] = d[f] + 1;
for (auto son : gr[node])
if (f != son.first)
dfs (son.first, node);
}
int n;
void lift () {
for (int k = 1; k < LG; k++)
for (int i = 1; i <= n; i++)
p[k][i] = p[k - 1][p[k - 1][i]];
}
int lca (int a, int b) {
int k;
k = LG - 1;
while (d[a] > d[b]) {
if (d[p[k][a]] >= d[b])
a = p[k][a];
k--;
}
k = LG - 1;
while (d[a] < d[b]) {
if (d[p[k][b]] >= d[a])
b = p[k][b];
k--;
}
k = LG - 1;
while (k >= 0) {
if (p[k][a] != p[k][b])
a = p[k][a], b = p[k][b];
k--;
}
if (a != b)
a = p[0][a];
return a;
}
int smen[1 + N];
ll ans;
void go (int node, int f) {
for (auto son : gr[node]) {
if (son.first == f) continue;
go (son.first, node);
smen[node] += smen[son.first];
}
for (auto son : gr[node]) {
if (son.first == f) {
int edge_id = son.second;
ans += min (1ll * e[edge_id].c1 * smen[node], 1ll * e[edge_id].c2);
}
}
}
int main() {
ios::sync_with_stdio (false);
cin.tie (0); cout.tie (0);
cin >> n;
for (int i = 1; i < n; i++) {
cin >> e[i].x >> e[i].y >> e[i].c1 >> e[i].c2;
gr[e[i].x].pb ({e[i].y, i});
gr[e[i].y].pb ({e[i].x, i});
}
dfs (1, 0);
lift ();
for (int i = 1; i < n; i++) {
int a = i, b = i + 1;
int c = lca (a, b);
smen[c] -= 2;
smen[a]++;
smen[b]++;
}
ans = 0;
go (1, 0);
cout << ans << "\n";
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
5112 KB |
Output is correct |
2 |
Correct |
9 ms |
5368 KB |
Output is correct |
3 |
Correct |
9 ms |
5368 KB |
Output is correct |
4 |
Correct |
9 ms |
5368 KB |
Output is correct |
5 |
Correct |
9 ms |
5368 KB |
Output is correct |
6 |
Correct |
7 ms |
5116 KB |
Output is correct |
7 |
Correct |
9 ms |
5240 KB |
Output is correct |
8 |
Correct |
8 ms |
5368 KB |
Output is correct |
9 |
Correct |
9 ms |
5372 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
168 ms |
21240 KB |
Output is correct |
2 |
Correct |
189 ms |
22432 KB |
Output is correct |
3 |
Correct |
173 ms |
24188 KB |
Output is correct |
4 |
Correct |
241 ms |
23928 KB |
Output is correct |
5 |
Correct |
9 ms |
5240 KB |
Output is correct |
6 |
Correct |
161 ms |
20728 KB |
Output is correct |
7 |
Correct |
89 ms |
16764 KB |
Output is correct |
8 |
Correct |
175 ms |
20984 KB |
Output is correct |
9 |
Correct |
80 ms |
21628 KB |
Output is correct |
10 |
Correct |
80 ms |
20984 KB |
Output is correct |
11 |
Correct |
84 ms |
22392 KB |
Output is correct |
12 |
Correct |
87 ms |
22392 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
5112 KB |
Output is correct |
2 |
Correct |
9 ms |
5368 KB |
Output is correct |
3 |
Correct |
9 ms |
5368 KB |
Output is correct |
4 |
Correct |
9 ms |
5368 KB |
Output is correct |
5 |
Correct |
9 ms |
5368 KB |
Output is correct |
6 |
Correct |
7 ms |
5116 KB |
Output is correct |
7 |
Correct |
9 ms |
5240 KB |
Output is correct |
8 |
Correct |
8 ms |
5368 KB |
Output is correct |
9 |
Correct |
9 ms |
5372 KB |
Output is correct |
10 |
Correct |
168 ms |
21240 KB |
Output is correct |
11 |
Correct |
189 ms |
22432 KB |
Output is correct |
12 |
Correct |
173 ms |
24188 KB |
Output is correct |
13 |
Correct |
241 ms |
23928 KB |
Output is correct |
14 |
Correct |
9 ms |
5240 KB |
Output is correct |
15 |
Correct |
161 ms |
20728 KB |
Output is correct |
16 |
Correct |
89 ms |
16764 KB |
Output is correct |
17 |
Correct |
175 ms |
20984 KB |
Output is correct |
18 |
Correct |
80 ms |
21628 KB |
Output is correct |
19 |
Correct |
80 ms |
20984 KB |
Output is correct |
20 |
Correct |
84 ms |
22392 KB |
Output is correct |
21 |
Correct |
87 ms |
22392 KB |
Output is correct |
22 |
Correct |
185 ms |
18552 KB |
Output is correct |
23 |
Correct |
149 ms |
17016 KB |
Output is correct |
24 |
Correct |
183 ms |
18432 KB |
Output is correct |
25 |
Correct |
8 ms |
5240 KB |
Output is correct |
26 |
Correct |
55 ms |
11384 KB |
Output is correct |
27 |
Correct |
140 ms |
16376 KB |
Output is correct |
28 |
Correct |
66 ms |
19704 KB |
Output is correct |
29 |
Correct |
87 ms |
22392 KB |
Output is correct |
30 |
Correct |
82 ms |
22276 KB |
Output is correct |
31 |
Correct |
8 ms |
5372 KB |
Output is correct |