# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
198057 |
2020-01-24T15:03:18 Z |
QCFium |
Bridges (APIO19_bridges) |
C++14 |
|
1892 ms |
11696 KB |
#include <bits/stdc++.h>
#ifdef _WIN32
# define getchar_fast _getchar_nolock
#else
# define getchar_fast getchar_unlocked
#endif
int ri() {
int r = 0, c, s = 0;
for (;;) {
c = getchar_fast();
if (c == '-') {
s = 1;
break;
}
if (c <= '9' && c >= '0') {
r = c - '0';
break;
}
}
for (;;) {
c = getchar_fast();
if (c < '0' || c > '9') break;
r = r * 10 + c - '0';
}
if (s) r = -r;
return r;
}
struct UnionFind {
std::vector<int> data;
std::vector<int> size;
std::vector<std::vector<std::pair<int, int> > > hens;
UnionFind (int n) : data(n, -1), size(n, 0), hens(n) {}
void add_hen(int start, int end, int index) { hens[start].push_back({index, end}); }
int root(int i) { return data[i] < 0 ? i : data[i] = root(data[i]); }
bool unite(int i, int j) {
i = root(i);
j = root(j);
if (i == j) return false;
if (-data[i] + size[i] > -data[j] + size[j]) std::swap(i, j);
// i->j
hens[j].reserve(hens[j].size() + hens[i].size());
for (auto k : hens[i]) hens[j].push_back(k);
hens[i].clear();
size[j] += size[i];
data[j] += data[i];
data[i] = j;
return true;
}
int get_size(int i) { return -data[root(i)]; }
void clear() {
std::fill(data.begin(), data.end(), -1);
std::fill(size.begin(), size.end(), 0);
for (auto &i : hens) i.clear();
}
};
int main() {
int n = ri(), m = ri();
struct Hen {
int a;
int b;
int cost;
int id;
};
std::vector<Hen> hens(m);
for (int i = 0; i < m; i++) hens[i].a = ri() - 1, hens[i].b = ri() - 1, hens[i].cost = ri(), hens[i].id = i;
struct Query {
int type;
int index;
int cost;
int id;
};
int q = ri();
std::vector<Query> qs(q);
for (int i = 0; i < q; i++) qs[i].type = ri() - 1, qs[i].index = ri() - 1, qs[i].cost = ri(), qs[i].id = i;
#define BLOCK 1000
std::vector<bool> changing(m);
std::vector<int> cost(m);
for (int i = 0; i < m; i++) cost[i] = hens[i].cost;
std::vector<bool> used(n);
std::vector<int> used_rollback;
std::vector<int> res(q);
for (int i = 0; i < q; i += BLOCK) {
auto hens_copy = hens;
std::sort(hens_copy.begin(), hens_copy.end(), [] (auto &i, auto &j) { return i.cost > j.cost; });
std::vector<Query> query, change;
for (int j = i; j < q && j < i + BLOCK; j++) {
if (!qs[j].type) changing[qs[j].index] = true, change.push_back(qs[j]);
else query.push_back(qs[j]);
}
std::sort(query.begin(), query.end(), [] (auto &i, auto &j) { return i.cost > j.cost; });
static UnionFind uni(n);
uni.clear();
for (int j = 0; j < m; j++) if (changing[j]) uni.add_hen(hens[j].a, hens[j].b, j), uni.add_hen(hens[j].b, hens[j].a, j);
int head = 0;
for (auto j : query) {
static std::vector<std::pair<int, int> > rollback;
for (auto &k : change) {
if (k.id > j.id) break;
rollback.push_back({k.index, cost[k.index]}), cost[k.index] = k.cost;
}
while (head < m && hens_copy[head].cost >= j.cost) {
if (!changing[hens_copy[head].id]) uni.unite(hens_copy[head].a, hens_copy[head].b);
head++;
}
auto use = [&] (int i) { used_rollback.push_back(i); used[i] = true; return i; };
std::queue<int> que;
que.push(use(uni.root(j.index)));
int cur = 0;
while (que.size()) {
int k = que.front();
que.pop();
cur += -uni.data[k];
for (auto l : uni.hens[k]) {
if (cost[l.first] < j.cost) continue;
int target = uni.root(l.second);
if (!used[target]) {
use(target);
que.push(target);
}
}
}
res[j.id] = cur;
for (auto k : used_rollback) used[k] = false;
used_rollback.clear();
for (; rollback.size(); rollback.pop_back()) cost[rollback.back().first] = rollback.back().second;
}
for (int j = i; j < q && j < i + BLOCK; j++) {
if (!qs[j].type) {
cost[qs[j].index] = qs[j].cost;
hens[qs[j].index].cost = qs[j].cost;
changing[qs[j].index] = false;
}
}
}
for (int i = 0; i < q; i++) if (qs[i].type) printf("%d\n", res[i]);
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
348 KB |
Output is correct |
3 |
Correct |
41 ms |
888 KB |
Output is correct |
4 |
Correct |
4 ms |
644 KB |
Output is correct |
5 |
Correct |
25 ms |
808 KB |
Output is correct |
6 |
Correct |
25 ms |
776 KB |
Output is correct |
7 |
Correct |
27 ms |
760 KB |
Output is correct |
8 |
Correct |
22 ms |
792 KB |
Output is correct |
9 |
Correct |
30 ms |
600 KB |
Output is correct |
10 |
Correct |
26 ms |
768 KB |
Output is correct |
11 |
Correct |
21 ms |
760 KB |
Output is correct |
12 |
Correct |
21 ms |
840 KB |
Output is correct |
13 |
Correct |
25 ms |
760 KB |
Output is correct |
14 |
Correct |
23 ms |
792 KB |
Output is correct |
15 |
Correct |
24 ms |
760 KB |
Output is correct |
16 |
Correct |
26 ms |
708 KB |
Output is correct |
17 |
Correct |
23 ms |
704 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
886 ms |
10052 KB |
Output is correct |
2 |
Correct |
884 ms |
9888 KB |
Output is correct |
3 |
Correct |
902 ms |
9976 KB |
Output is correct |
4 |
Correct |
881 ms |
9996 KB |
Output is correct |
5 |
Correct |
877 ms |
10056 KB |
Output is correct |
6 |
Correct |
1892 ms |
9928 KB |
Output is correct |
7 |
Correct |
1479 ms |
10060 KB |
Output is correct |
8 |
Correct |
1271 ms |
10064 KB |
Output is correct |
9 |
Correct |
45 ms |
3960 KB |
Output is correct |
10 |
Correct |
1288 ms |
8900 KB |
Output is correct |
11 |
Correct |
1096 ms |
8900 KB |
Output is correct |
12 |
Correct |
894 ms |
9348 KB |
Output is correct |
13 |
Correct |
1000 ms |
10072 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
706 ms |
8116 KB |
Output is correct |
2 |
Correct |
962 ms |
5012 KB |
Output is correct |
3 |
Correct |
1470 ms |
7912 KB |
Output is correct |
4 |
Correct |
920 ms |
8128 KB |
Output is correct |
5 |
Correct |
35 ms |
3832 KB |
Output is correct |
6 |
Correct |
867 ms |
8012 KB |
Output is correct |
7 |
Correct |
815 ms |
7984 KB |
Output is correct |
8 |
Correct |
711 ms |
8112 KB |
Output is correct |
9 |
Correct |
628 ms |
7680 KB |
Output is correct |
10 |
Correct |
557 ms |
7680 KB |
Output is correct |
11 |
Correct |
662 ms |
7928 KB |
Output is correct |
12 |
Correct |
618 ms |
8008 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1343 ms |
11676 KB |
Output is correct |
2 |
Correct |
32 ms |
3896 KB |
Output is correct |
3 |
Correct |
106 ms |
5996 KB |
Output is correct |
4 |
Correct |
46 ms |
6124 KB |
Output is correct |
5 |
Correct |
774 ms |
10288 KB |
Output is correct |
6 |
Correct |
1339 ms |
11696 KB |
Output is correct |
7 |
Correct |
781 ms |
10276 KB |
Output is correct |
8 |
Correct |
746 ms |
7256 KB |
Output is correct |
9 |
Correct |
741 ms |
5836 KB |
Output is correct |
10 |
Correct |
750 ms |
6096 KB |
Output is correct |
11 |
Correct |
1124 ms |
6848 KB |
Output is correct |
12 |
Correct |
1117 ms |
6864 KB |
Output is correct |
13 |
Correct |
1142 ms |
6988 KB |
Output is correct |
14 |
Correct |
717 ms |
7992 KB |
Output is correct |
15 |
Correct |
757 ms |
7988 KB |
Output is correct |
16 |
Correct |
1402 ms |
7824 KB |
Output is correct |
17 |
Correct |
1452 ms |
7820 KB |
Output is correct |
18 |
Correct |
1386 ms |
7844 KB |
Output is correct |
19 |
Correct |
1411 ms |
7828 KB |
Output is correct |
20 |
Correct |
1237 ms |
7412 KB |
Output is correct |
21 |
Correct |
1232 ms |
7408 KB |
Output is correct |
22 |
Correct |
1345 ms |
7780 KB |
Output is correct |
23 |
Correct |
857 ms |
7136 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
886 ms |
10052 KB |
Output is correct |
2 |
Correct |
884 ms |
9888 KB |
Output is correct |
3 |
Correct |
902 ms |
9976 KB |
Output is correct |
4 |
Correct |
881 ms |
9996 KB |
Output is correct |
5 |
Correct |
877 ms |
10056 KB |
Output is correct |
6 |
Correct |
1892 ms |
9928 KB |
Output is correct |
7 |
Correct |
1479 ms |
10060 KB |
Output is correct |
8 |
Correct |
1271 ms |
10064 KB |
Output is correct |
9 |
Correct |
45 ms |
3960 KB |
Output is correct |
10 |
Correct |
1288 ms |
8900 KB |
Output is correct |
11 |
Correct |
1096 ms |
8900 KB |
Output is correct |
12 |
Correct |
894 ms |
9348 KB |
Output is correct |
13 |
Correct |
1000 ms |
10072 KB |
Output is correct |
14 |
Correct |
706 ms |
8116 KB |
Output is correct |
15 |
Correct |
962 ms |
5012 KB |
Output is correct |
16 |
Correct |
1470 ms |
7912 KB |
Output is correct |
17 |
Correct |
920 ms |
8128 KB |
Output is correct |
18 |
Correct |
35 ms |
3832 KB |
Output is correct |
19 |
Correct |
867 ms |
8012 KB |
Output is correct |
20 |
Correct |
815 ms |
7984 KB |
Output is correct |
21 |
Correct |
711 ms |
8112 KB |
Output is correct |
22 |
Correct |
628 ms |
7680 KB |
Output is correct |
23 |
Correct |
557 ms |
7680 KB |
Output is correct |
24 |
Correct |
662 ms |
7928 KB |
Output is correct |
25 |
Correct |
618 ms |
8008 KB |
Output is correct |
26 |
Correct |
1012 ms |
7304 KB |
Output is correct |
27 |
Correct |
1647 ms |
7216 KB |
Output is correct |
28 |
Correct |
1138 ms |
7188 KB |
Output is correct |
29 |
Correct |
949 ms |
7120 KB |
Output is correct |
30 |
Correct |
1345 ms |
7156 KB |
Output is correct |
31 |
Correct |
1420 ms |
7260 KB |
Output is correct |
32 |
Correct |
1418 ms |
7252 KB |
Output is correct |
33 |
Correct |
961 ms |
7248 KB |
Output is correct |
34 |
Correct |
983 ms |
7220 KB |
Output is correct |
35 |
Correct |
988 ms |
7260 KB |
Output is correct |
36 |
Correct |
915 ms |
7136 KB |
Output is correct |
37 |
Correct |
1006 ms |
7124 KB |
Output is correct |
38 |
Correct |
923 ms |
7236 KB |
Output is correct |
39 |
Correct |
840 ms |
6560 KB |
Output is correct |
40 |
Correct |
803 ms |
6516 KB |
Output is correct |
41 |
Correct |
891 ms |
6572 KB |
Output is correct |
42 |
Correct |
814 ms |
8516 KB |
Output is correct |
43 |
Correct |
832 ms |
8540 KB |
Output is correct |
44 |
Correct |
822 ms |
8548 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
348 KB |
Output is correct |
3 |
Correct |
41 ms |
888 KB |
Output is correct |
4 |
Correct |
4 ms |
644 KB |
Output is correct |
5 |
Correct |
25 ms |
808 KB |
Output is correct |
6 |
Correct |
25 ms |
776 KB |
Output is correct |
7 |
Correct |
27 ms |
760 KB |
Output is correct |
8 |
Correct |
22 ms |
792 KB |
Output is correct |
9 |
Correct |
30 ms |
600 KB |
Output is correct |
10 |
Correct |
26 ms |
768 KB |
Output is correct |
11 |
Correct |
21 ms |
760 KB |
Output is correct |
12 |
Correct |
21 ms |
840 KB |
Output is correct |
13 |
Correct |
25 ms |
760 KB |
Output is correct |
14 |
Correct |
23 ms |
792 KB |
Output is correct |
15 |
Correct |
24 ms |
760 KB |
Output is correct |
16 |
Correct |
26 ms |
708 KB |
Output is correct |
17 |
Correct |
23 ms |
704 KB |
Output is correct |
18 |
Correct |
886 ms |
10052 KB |
Output is correct |
19 |
Correct |
884 ms |
9888 KB |
Output is correct |
20 |
Correct |
902 ms |
9976 KB |
Output is correct |
21 |
Correct |
881 ms |
9996 KB |
Output is correct |
22 |
Correct |
877 ms |
10056 KB |
Output is correct |
23 |
Correct |
1892 ms |
9928 KB |
Output is correct |
24 |
Correct |
1479 ms |
10060 KB |
Output is correct |
25 |
Correct |
1271 ms |
10064 KB |
Output is correct |
26 |
Correct |
45 ms |
3960 KB |
Output is correct |
27 |
Correct |
1288 ms |
8900 KB |
Output is correct |
28 |
Correct |
1096 ms |
8900 KB |
Output is correct |
29 |
Correct |
894 ms |
9348 KB |
Output is correct |
30 |
Correct |
1000 ms |
10072 KB |
Output is correct |
31 |
Correct |
706 ms |
8116 KB |
Output is correct |
32 |
Correct |
962 ms |
5012 KB |
Output is correct |
33 |
Correct |
1470 ms |
7912 KB |
Output is correct |
34 |
Correct |
920 ms |
8128 KB |
Output is correct |
35 |
Correct |
35 ms |
3832 KB |
Output is correct |
36 |
Correct |
867 ms |
8012 KB |
Output is correct |
37 |
Correct |
815 ms |
7984 KB |
Output is correct |
38 |
Correct |
711 ms |
8112 KB |
Output is correct |
39 |
Correct |
628 ms |
7680 KB |
Output is correct |
40 |
Correct |
557 ms |
7680 KB |
Output is correct |
41 |
Correct |
662 ms |
7928 KB |
Output is correct |
42 |
Correct |
618 ms |
8008 KB |
Output is correct |
43 |
Correct |
1343 ms |
11676 KB |
Output is correct |
44 |
Correct |
32 ms |
3896 KB |
Output is correct |
45 |
Correct |
106 ms |
5996 KB |
Output is correct |
46 |
Correct |
46 ms |
6124 KB |
Output is correct |
47 |
Correct |
774 ms |
10288 KB |
Output is correct |
48 |
Correct |
1339 ms |
11696 KB |
Output is correct |
49 |
Correct |
781 ms |
10276 KB |
Output is correct |
50 |
Correct |
746 ms |
7256 KB |
Output is correct |
51 |
Correct |
741 ms |
5836 KB |
Output is correct |
52 |
Correct |
750 ms |
6096 KB |
Output is correct |
53 |
Correct |
1124 ms |
6848 KB |
Output is correct |
54 |
Correct |
1117 ms |
6864 KB |
Output is correct |
55 |
Correct |
1142 ms |
6988 KB |
Output is correct |
56 |
Correct |
717 ms |
7992 KB |
Output is correct |
57 |
Correct |
757 ms |
7988 KB |
Output is correct |
58 |
Correct |
1402 ms |
7824 KB |
Output is correct |
59 |
Correct |
1452 ms |
7820 KB |
Output is correct |
60 |
Correct |
1386 ms |
7844 KB |
Output is correct |
61 |
Correct |
1411 ms |
7828 KB |
Output is correct |
62 |
Correct |
1237 ms |
7412 KB |
Output is correct |
63 |
Correct |
1232 ms |
7408 KB |
Output is correct |
64 |
Correct |
1345 ms |
7780 KB |
Output is correct |
65 |
Correct |
857 ms |
7136 KB |
Output is correct |
66 |
Correct |
1012 ms |
7304 KB |
Output is correct |
67 |
Correct |
1647 ms |
7216 KB |
Output is correct |
68 |
Correct |
1138 ms |
7188 KB |
Output is correct |
69 |
Correct |
949 ms |
7120 KB |
Output is correct |
70 |
Correct |
1345 ms |
7156 KB |
Output is correct |
71 |
Correct |
1420 ms |
7260 KB |
Output is correct |
72 |
Correct |
1418 ms |
7252 KB |
Output is correct |
73 |
Correct |
961 ms |
7248 KB |
Output is correct |
74 |
Correct |
983 ms |
7220 KB |
Output is correct |
75 |
Correct |
988 ms |
7260 KB |
Output is correct |
76 |
Correct |
915 ms |
7136 KB |
Output is correct |
77 |
Correct |
1006 ms |
7124 KB |
Output is correct |
78 |
Correct |
923 ms |
7236 KB |
Output is correct |
79 |
Correct |
840 ms |
6560 KB |
Output is correct |
80 |
Correct |
803 ms |
6516 KB |
Output is correct |
81 |
Correct |
891 ms |
6572 KB |
Output is correct |
82 |
Correct |
814 ms |
8516 KB |
Output is correct |
83 |
Correct |
832 ms |
8540 KB |
Output is correct |
84 |
Correct |
822 ms |
8548 KB |
Output is correct |
85 |
Correct |
1866 ms |
10360 KB |
Output is correct |
86 |
Correct |
157 ms |
5492 KB |
Output is correct |
87 |
Correct |
88 ms |
5480 KB |
Output is correct |
88 |
Correct |
1298 ms |
10744 KB |
Output is correct |
89 |
Correct |
1860 ms |
10420 KB |
Output is correct |
90 |
Correct |
1319 ms |
10768 KB |
Output is correct |
91 |
Correct |
927 ms |
8564 KB |
Output is correct |
92 |
Correct |
908 ms |
8508 KB |
Output is correct |
93 |
Correct |
953 ms |
8568 KB |
Output is correct |
94 |
Correct |
1364 ms |
10016 KB |
Output is correct |
95 |
Correct |
1314 ms |
9924 KB |
Output is correct |
96 |
Correct |
1347 ms |
10200 KB |
Output is correct |
97 |
Correct |
950 ms |
9848 KB |
Output is correct |
98 |
Correct |
1107 ms |
11144 KB |
Output is correct |
99 |
Correct |
1809 ms |
10748 KB |
Output is correct |
100 |
Correct |
1826 ms |
10640 KB |
Output is correct |
101 |
Correct |
1814 ms |
10552 KB |
Output is correct |
102 |
Correct |
1780 ms |
10352 KB |
Output is correct |
103 |
Correct |
1572 ms |
10324 KB |
Output is correct |
104 |
Correct |
1524 ms |
10592 KB |
Output is correct |
105 |
Correct |
1442 ms |
11292 KB |
Output is correct |
106 |
Correct |
1231 ms |
11228 KB |
Output is correct |
107 |
Correct |
1321 ms |
9320 KB |
Output is correct |
108 |
Correct |
1855 ms |
10284 KB |
Output is correct |
109 |
Correct |
1313 ms |
9672 KB |
Output is correct |