#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstdlib>
//FILE *fin = fopen("a.in", "r"), *fout = fopen("a.out", "w");
#define fin stdin
#define fout stdout
#define ll long long
#define MAXN 200009
struct myc {
int x, y, z;
};
std::vector < int > candidat[MAXN];
std::vector < myc > g[MAXN];
ll ans[MAXN], sumaTuturor;
int e[MAXN], desteptu[MAXN], istetu[MAXN];
bool viz[MAXN], luat[MAXN], seen[MAXN];
ll sum[MAXN], calc[MAXN], h[MAXN], cost[MAXN];
int t[MAXN], cine[MAXN], perm[MAXN];
int A, B, C;
void dfs1(int x) {
viz[x] = 1;
for (auto &y : g[x]) {
if (viz[y.x] == 0) {
dfs1(y.x);
sum[x] += sum[y.x] + y.z;
}
}
}
void dfs2(int x, ll dinSpate) {
viz[x] = 1;
calc[x] = sum[x] + dinSpate;
ans[1] = std::min(ans[1], sumaTuturor - calc[x]);
desteptu[x] = x;
for (auto &y : g[x]) {
if (viz[y.x] == 0) {
h[y.x] = h[x] + y.y;
dfs2(y.x, dinSpate + sum[x] - sum[y.x] - y.z + y.y);
if (h[desteptu[y.x]] > h[desteptu[x]]) {
istetu[x] = desteptu[x];
desteptu[x] = desteptu[y.x];
} else if (h[desteptu[y.x]] > h[istetu[x]])
istetu[x] = desteptu[y.x];
}
}
if (h[desteptu[x]] + h[istetu[x]] - h[x] + calc[x] > h[A] + h[B] - h[C] + calc[C])
A = desteptu[x], B = istetu[x], C = x;
}
void dfs3(int x) {
viz[x] = 1;
bool frunza = 1;
desteptu[x] = x;
for (auto &y : g[x]) {
if (viz[y.x] == 0) {
frunza = 0;
h[y.x] = h[x] + y.y;
t[y.x] = x;
dfs3(y.x);
if (h[desteptu[y.x]] > h[desteptu[x]])
desteptu[x] = desteptu[y.x];
luat[x] |= luat[y.x];
if (luat[y.x] == 0)
ans[2] += y.y;
}
}
if(frunza)
e[++e[0]] = x;
}
bool cmp(const int &a, const int &b) {
return cost[a] > cost[b];
}
void dfs4(int x) {
viz[x] = 1;
for (auto &y : g[x]) {
if (viz[y.x] == 0) {
if (luat[y.x] == 0 && seen[desteptu[y.x]] == 0) {
seen[desteptu[y.x]] = 1;
cost[desteptu[y.x]] = h[desteptu[y.x]] - h[x];
candidat[x].push_back(desteptu[y.x]);
}
dfs4(y.x);
}
}
std::sort(candidat[x].begin(), candidat[x].end(), cmp);
}
inline void solve(int n) {
int rad = 0;
for (int i = 1; i <= n; i++)
if ((int)g[i].size() != 1)
rad = i;
ans[1] = sumaTuturor;
dfs1(rad);
for (int i = 1; i <= n; i++)
viz[i] = 0;
h[0] = cost[0] = -1000000000000000000LL;
dfs2(rad, 0);
for (int i = 1; i <= n; i++)
viz[i] = 0;
luat[A] = luat[B] = 1;
h[C] = 0;
dfs3(C);
for (int i = 1; i <= n; i++)
viz[i] = 0;
dfs4(C);
for (int i = 1; i <= n; i++)
for (auto &x : g[i])
if (luat[x.x] == 0 && t[x.x] == i)
cost[x.x] = h[desteptu[x.x]] - h[i], cine[x.x] = desteptu[x.x];
for (int i = 1; i <= n; i++)
perm[i] = i;
std::sort(perm + 1, perm + n + 1, cmp);
int poz = 1;
for (int i = 3; i <= e[0]; i++) {
while (luat[cine[perm[poz]]])
poz++;
ans[i] = ans[i - 1] - cost[perm[poz]];
int best = cine[perm[poz]];
while (luat[best] == 0) {
luat[best] = 1;
best = t[best];
}
}
}
int main() {
int n;
fscanf(fin, "%d", &n);
for (int i = 1; i < n; i++) {
int x, y, z, t;
fscanf(fin, "%d%d%d%d", &x, &y, &z, &t);
g[x].push_back({y, z, t});
g[y].push_back({x, t, z});
sumaTuturor += z + t;
ans[1] = std::min(z, t);
}
if (n > 2)
solve(n);
int q;
fscanf(fin, "%d", &q);
for (; q; q--) {
int x;
fscanf(fin, "%d", &x);
fprintf(fout, "%lld\n", ans[x]);
}
fclose(fin);
fclose(fout);
return 0;
}
Compilation message
designated_cities.cpp: In function 'int main()':
designated_cities.cpp:140:11: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
fscanf(fin, "%d", &n);
~~~~~~^~~~~~~~~~~~~~~
designated_cities.cpp:144:15: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
fscanf(fin, "%d%d%d%d", &x, &y, &z, &t);
~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
designated_cities.cpp:157:11: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
fscanf(fin, "%d", &q);
~~~~~~^~~~~~~~~~~~~~~
designated_cities.cpp:161:15: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
fscanf(fin, "%d", &x);
~~~~~~^~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
9728 KB |
Output is correct |
2 |
Correct |
12 ms |
9856 KB |
Output is correct |
3 |
Correct |
11 ms |
9700 KB |
Output is correct |
4 |
Correct |
11 ms |
9728 KB |
Output is correct |
5 |
Correct |
11 ms |
9728 KB |
Output is correct |
6 |
Correct |
12 ms |
9728 KB |
Output is correct |
7 |
Incorrect |
11 ms |
9720 KB |
Output isn't correct |
8 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
9728 KB |
Output is correct |
2 |
Correct |
634 ms |
31568 KB |
Output is correct |
3 |
Correct |
618 ms |
32888 KB |
Output is correct |
4 |
Correct |
660 ms |
31376 KB |
Output is correct |
5 |
Correct |
657 ms |
31276 KB |
Output is correct |
6 |
Correct |
671 ms |
33148 KB |
Output is correct |
7 |
Correct |
451 ms |
31016 KB |
Output is correct |
8 |
Correct |
662 ms |
37996 KB |
Output is correct |
9 |
Correct |
519 ms |
31064 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
9728 KB |
Output is correct |
2 |
Correct |
695 ms |
31596 KB |
Output is correct |
3 |
Correct |
614 ms |
32476 KB |
Output is correct |
4 |
Correct |
696 ms |
31480 KB |
Output is correct |
5 |
Correct |
573 ms |
31264 KB |
Output is correct |
6 |
Correct |
630 ms |
32932 KB |
Output is correct |
7 |
Correct |
512 ms |
32940 KB |
Output is correct |
8 |
Correct |
614 ms |
39052 KB |
Output is correct |
9 |
Correct |
530 ms |
30980 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
9728 KB |
Output is correct |
2 |
Correct |
12 ms |
9856 KB |
Output is correct |
3 |
Correct |
11 ms |
9700 KB |
Output is correct |
4 |
Correct |
11 ms |
9728 KB |
Output is correct |
5 |
Correct |
11 ms |
9728 KB |
Output is correct |
6 |
Correct |
12 ms |
9728 KB |
Output is correct |
7 |
Incorrect |
11 ms |
9720 KB |
Output isn't correct |
8 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
9728 KB |
Output is correct |
2 |
Correct |
634 ms |
31568 KB |
Output is correct |
3 |
Correct |
618 ms |
32888 KB |
Output is correct |
4 |
Correct |
660 ms |
31376 KB |
Output is correct |
5 |
Correct |
657 ms |
31276 KB |
Output is correct |
6 |
Correct |
671 ms |
33148 KB |
Output is correct |
7 |
Correct |
451 ms |
31016 KB |
Output is correct |
8 |
Correct |
662 ms |
37996 KB |
Output is correct |
9 |
Correct |
519 ms |
31064 KB |
Output is correct |
10 |
Correct |
7 ms |
9728 KB |
Output is correct |
11 |
Correct |
695 ms |
31596 KB |
Output is correct |
12 |
Correct |
614 ms |
32476 KB |
Output is correct |
13 |
Correct |
696 ms |
31480 KB |
Output is correct |
14 |
Correct |
573 ms |
31264 KB |
Output is correct |
15 |
Correct |
630 ms |
32932 KB |
Output is correct |
16 |
Correct |
512 ms |
32940 KB |
Output is correct |
17 |
Correct |
614 ms |
39052 KB |
Output is correct |
18 |
Correct |
530 ms |
30980 KB |
Output is correct |
19 |
Correct |
11 ms |
9728 KB |
Output is correct |
20 |
Correct |
671 ms |
31456 KB |
Output is correct |
21 |
Correct |
632 ms |
33016 KB |
Output is correct |
22 |
Correct |
620 ms |
31540 KB |
Output is correct |
23 |
Correct |
744 ms |
31480 KB |
Output is correct |
24 |
Correct |
621 ms |
31352 KB |
Output is correct |
25 |
Correct |
646 ms |
31352 KB |
Output is correct |
26 |
Correct |
663 ms |
31596 KB |
Output is correct |
27 |
Correct |
614 ms |
31156 KB |
Output is correct |
28 |
Correct |
701 ms |
33016 KB |
Output is correct |
29 |
Correct |
617 ms |
30888 KB |
Output is correct |
30 |
Correct |
598 ms |
31700 KB |
Output is correct |
31 |
Correct |
572 ms |
31272 KB |
Output is correct |
32 |
Correct |
657 ms |
38176 KB |
Output is correct |
33 |
Correct |
563 ms |
31008 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
9728 KB |
Output is correct |
2 |
Correct |
12 ms |
9856 KB |
Output is correct |
3 |
Correct |
11 ms |
9700 KB |
Output is correct |
4 |
Correct |
11 ms |
9728 KB |
Output is correct |
5 |
Correct |
11 ms |
9728 KB |
Output is correct |
6 |
Correct |
12 ms |
9728 KB |
Output is correct |
7 |
Incorrect |
11 ms |
9720 KB |
Output isn't correct |
8 |
Halted |
0 ms |
0 KB |
- |