# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
398369 |
2021-05-04T08:14:24 Z |
oolimry |
Bridges (APIO19_bridges) |
C++17 |
|
1677 ms |
13656 KB |
#include <bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
#define sz(x) ((int) x.size())
#define show(x) cerr << #x << " is " << x << endl;
#define show2(x, y) cerr << #x << " is " << x << ", " << #y << " is " << y << endl;
#define show3(x, y, z) cerr << #x << " is " << x << ", " << #y << " is " << y << ", " << #z << " is " << z << endl;
typedef long long lint;
typedef pair<int, int> ii;
const int UPD = 1;
const int QRY = 2;
int edgeW[100005];
int U[100005];
int V[100005]; ///if B == -1, then is query
vector<ii> history[100005];
int n, m, Q;
int T[100005];
int queryW[100005];
int X[100005];
int ans[100005];
int p[50005];
int sz[50005];
int rak[50005];
inline void reset(){
for(int i = 1;i <= n;i++) p[i] = i, sz[i] = 1, rak[i] = 0;
}
inline int findSet(int u){
if(p[u] == u) return u;
else return p[u] = findSet(p[u]);
}
inline void unionSet(int u, int v){
u = findSet(u), v = findSet(v);
if(u == v) return;
if(rak[u] > rak[v]) swap(u,v);
if(rak[u] == rak[v]) rak[v]++;
p[u] = v;
sz[v] += sz[u];
}
bool changed[100005];
vector<int> order;
vector<int> neworder;
int ptr = 1;
inline void catchup(int limit){
vector<int> C;
for(;ptr <= limit;ptr++){
if(T[ptr] == UPD){
edgeW[X[ptr]] = queryW[ptr];
C.push_back(X[ptr]);
changed[X[ptr]] = true;
}
}
sort(all(C), [&](int a, int b){ return edgeW[a] > edgeW[b]; });
C.erase(unique(all(C)), C.end());
auto it = order.begin();
for(int e : C){
int w = edgeW[e];
while(it != order.end()){
if(changed[*it]){
it++;
continue;
}
if(edgeW[*it] < w) break;
else neworder.push_back(*it);
it++;
}
neworder.push_back(e);
}
while(it != order.end()){
if(not changed[*it]) neworder.push_back(*it);
it++;
}
for(int e : C) changed[e] = false;
swap(order,neworder); neworder.clear();
}
vector<int> adj[50005];
bool vis[50005];
int dfs(int u){
int res = sz[u];
vis[u] = true;
for(int v : adj[u]){
if(not vis[v]){
res += dfs(v);
}
}
return res;
}
inline void solve(int L, int R){
catchup(L);
vector<int> stuff;
vector<int> changededges;
for(int i = L;i <= R;i++){
stuff.push_back(i);
if(T[i] == UPD) changededges.push_back(X[i]);
}
for(int x : changededges) changed[x] = true;
reset();
sort(all(stuff), [&](int a, int b){ return queryW[a] > queryW[b]; });
auto it = order.begin();
for(int qid : stuff){ ///decreasing w
int w = queryW[qid];
if(T[qid] == UPD) continue;
while(it != order.end()){
if(edgeW[*it] < w) break;
else{
int e = *it;
if(not changed[e]){
unionSet(U[e], V[e]);
}
it++;
}
}
///if is query
vector<int> special;
for(int e : changededges){
auto it = upper_bound(all(history[e]), ii(qid,-1)); it--;
if(it->second < w) continue; ///edge weight not enough to handle car weight
int u = findSet(U[e]), v = findSet(V[e]);
if(u == v){
special.push_back(u);
}
else{
adj[u].push_back(v);
adj[v].push_back(u);
special.push_back(u);
special.push_back(v);
}
}
int source = findSet(X[qid]);
special.push_back(source);
int res = dfs(source);
ans[qid] = res;
///reset the stuff
for(int u : special) vis[u] = false, adj[u].clear();
}
///reset the stuff
for(int e : changededges) changed[e] = false;
}
const int B1 = 400; ///minimum size to proceed
const int B2 = 250; ///max number of updates to handle
int main(){
//freopen("i.txt","r",stdin);
ios_base::sync_with_stdio(false); cin.tie(0);
cin >> n >> m;
for(int i = 1;i <= m;i++) cin >> U[i] >> V[i] >> edgeW[i];
sort(all(order), [&](int a, int b){ return edgeW[a] > edgeW[b]; });
cin >> Q;
for(int i = 1;i <= Q;i++) cin >> T[i] >> X[i] >> queryW[i];
order.resize(m);
for(int i = 1;i <= m;i++) order[i-1] = i;
sort(all(order), [&](int a, int b){ return edgeW[a] > edgeW[b]; });
for(int i = 1;i <= m;i++) history[i].push_back(ii(0, edgeW[i]));
for(int i = 1;i <= Q;i++){
if(T[i] == UPD) history[X[i]].push_back(ii(i, queryW[i]));
}
///bruh prunning
int L = -1, R = -1, cnt = 0;
for(int i = 1;i <= Q;i++){
if(L == -1){
if(T[i] == QRY) L = i, R = i;
}
else{
if(T[i] == UPD) cnt++;
else R = i;
}
if((R-L+1 >= B1 and cnt >= B2) or i == Q){
solve(L,R);
cnt = 0, L = -1, R = -1;
}
}
for(int i = 1;i <= Q;i++){
if(T[i] == QRY) cout << ans[i] << '\n';
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
3788 KB |
Output is correct |
2 |
Correct |
3 ms |
3788 KB |
Output is correct |
3 |
Correct |
50 ms |
4164 KB |
Output is correct |
4 |
Correct |
9 ms |
4172 KB |
Output is correct |
5 |
Correct |
82 ms |
4120 KB |
Output is correct |
6 |
Correct |
71 ms |
4100 KB |
Output is correct |
7 |
Correct |
78 ms |
4100 KB |
Output is correct |
8 |
Correct |
71 ms |
4104 KB |
Output is correct |
9 |
Correct |
88 ms |
4104 KB |
Output is correct |
10 |
Correct |
82 ms |
4092 KB |
Output is correct |
11 |
Correct |
71 ms |
4096 KB |
Output is correct |
12 |
Correct |
78 ms |
4112 KB |
Output is correct |
13 |
Correct |
73 ms |
4048 KB |
Output is correct |
14 |
Correct |
69 ms |
4116 KB |
Output is correct |
15 |
Correct |
81 ms |
4100 KB |
Output is correct |
16 |
Correct |
76 ms |
4116 KB |
Output is correct |
17 |
Correct |
75 ms |
4112 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1243 ms |
10812 KB |
Output is correct |
2 |
Correct |
1212 ms |
10316 KB |
Output is correct |
3 |
Correct |
1243 ms |
10352 KB |
Output is correct |
4 |
Correct |
1321 ms |
10244 KB |
Output is correct |
5 |
Correct |
1309 ms |
10324 KB |
Output is correct |
6 |
Correct |
1589 ms |
9544 KB |
Output is correct |
7 |
Correct |
1491 ms |
9532 KB |
Output is correct |
8 |
Correct |
1457 ms |
9500 KB |
Output is correct |
9 |
Correct |
56 ms |
5928 KB |
Output is correct |
10 |
Correct |
1217 ms |
10240 KB |
Output is correct |
11 |
Correct |
1142 ms |
10312 KB |
Output is correct |
12 |
Correct |
1677 ms |
9292 KB |
Output is correct |
13 |
Correct |
903 ms |
9936 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1004 ms |
10596 KB |
Output is correct |
2 |
Correct |
846 ms |
6980 KB |
Output is correct |
3 |
Correct |
1094 ms |
9036 KB |
Output is correct |
4 |
Correct |
970 ms |
8976 KB |
Output is correct |
5 |
Correct |
50 ms |
5952 KB |
Output is correct |
6 |
Correct |
1036 ms |
8924 KB |
Output is correct |
7 |
Correct |
924 ms |
8952 KB |
Output is correct |
8 |
Correct |
814 ms |
8896 KB |
Output is correct |
9 |
Correct |
1140 ms |
8344 KB |
Output is correct |
10 |
Correct |
912 ms |
8232 KB |
Output is correct |
11 |
Correct |
680 ms |
9436 KB |
Output is correct |
12 |
Correct |
658 ms |
9416 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
111 ms |
11700 KB |
Output is correct |
2 |
Correct |
52 ms |
6332 KB |
Output is correct |
3 |
Correct |
55 ms |
9616 KB |
Output is correct |
4 |
Correct |
47 ms |
9664 KB |
Output is correct |
5 |
Correct |
110 ms |
12908 KB |
Output is correct |
6 |
Correct |
120 ms |
12132 KB |
Output is correct |
7 |
Correct |
86 ms |
13172 KB |
Output is correct |
8 |
Correct |
90 ms |
10684 KB |
Output is correct |
9 |
Correct |
88 ms |
9388 KB |
Output is correct |
10 |
Correct |
89 ms |
10556 KB |
Output is correct |
11 |
Correct |
129 ms |
11008 KB |
Output is correct |
12 |
Correct |
130 ms |
12328 KB |
Output is correct |
13 |
Correct |
105 ms |
12468 KB |
Output is correct |
14 |
Correct |
79 ms |
13240 KB |
Output is correct |
15 |
Correct |
81 ms |
13152 KB |
Output is correct |
16 |
Correct |
126 ms |
13452 KB |
Output is correct |
17 |
Correct |
134 ms |
13656 KB |
Output is correct |
18 |
Correct |
112 ms |
13116 KB |
Output is correct |
19 |
Correct |
143 ms |
13572 KB |
Output is correct |
20 |
Correct |
106 ms |
12928 KB |
Output is correct |
21 |
Correct |
103 ms |
12772 KB |
Output is correct |
22 |
Correct |
123 ms |
13620 KB |
Output is correct |
23 |
Correct |
75 ms |
12088 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1243 ms |
10812 KB |
Output is correct |
2 |
Correct |
1212 ms |
10316 KB |
Output is correct |
3 |
Correct |
1243 ms |
10352 KB |
Output is correct |
4 |
Correct |
1321 ms |
10244 KB |
Output is correct |
5 |
Correct |
1309 ms |
10324 KB |
Output is correct |
6 |
Correct |
1589 ms |
9544 KB |
Output is correct |
7 |
Correct |
1491 ms |
9532 KB |
Output is correct |
8 |
Correct |
1457 ms |
9500 KB |
Output is correct |
9 |
Correct |
56 ms |
5928 KB |
Output is correct |
10 |
Correct |
1217 ms |
10240 KB |
Output is correct |
11 |
Correct |
1142 ms |
10312 KB |
Output is correct |
12 |
Correct |
1677 ms |
9292 KB |
Output is correct |
13 |
Correct |
903 ms |
9936 KB |
Output is correct |
14 |
Correct |
1004 ms |
10596 KB |
Output is correct |
15 |
Correct |
846 ms |
6980 KB |
Output is correct |
16 |
Correct |
1094 ms |
9036 KB |
Output is correct |
17 |
Correct |
970 ms |
8976 KB |
Output is correct |
18 |
Correct |
50 ms |
5952 KB |
Output is correct |
19 |
Correct |
1036 ms |
8924 KB |
Output is correct |
20 |
Correct |
924 ms |
8952 KB |
Output is correct |
21 |
Correct |
814 ms |
8896 KB |
Output is correct |
22 |
Correct |
1140 ms |
8344 KB |
Output is correct |
23 |
Correct |
912 ms |
8232 KB |
Output is correct |
24 |
Correct |
680 ms |
9436 KB |
Output is correct |
25 |
Correct |
658 ms |
9416 KB |
Output is correct |
26 |
Correct |
1321 ms |
10460 KB |
Output is correct |
27 |
Correct |
1456 ms |
10272 KB |
Output is correct |
28 |
Correct |
1302 ms |
10284 KB |
Output is correct |
29 |
Correct |
973 ms |
10308 KB |
Output is correct |
30 |
Correct |
1454 ms |
10464 KB |
Output is correct |
31 |
Correct |
1442 ms |
10540 KB |
Output is correct |
32 |
Correct |
1510 ms |
10384 KB |
Output is correct |
33 |
Correct |
1284 ms |
10432 KB |
Output is correct |
34 |
Correct |
1299 ms |
10348 KB |
Output is correct |
35 |
Correct |
1331 ms |
10484 KB |
Output is correct |
36 |
Correct |
1049 ms |
10516 KB |
Output is correct |
37 |
Correct |
1052 ms |
10344 KB |
Output is correct |
38 |
Correct |
1045 ms |
10560 KB |
Output is correct |
39 |
Correct |
724 ms |
9520 KB |
Output is correct |
40 |
Correct |
741 ms |
9592 KB |
Output is correct |
41 |
Correct |
714 ms |
9504 KB |
Output is correct |
42 |
Correct |
846 ms |
10932 KB |
Output is correct |
43 |
Correct |
876 ms |
10928 KB |
Output is correct |
44 |
Correct |
829 ms |
10744 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
3788 KB |
Output is correct |
2 |
Correct |
3 ms |
3788 KB |
Output is correct |
3 |
Correct |
50 ms |
4164 KB |
Output is correct |
4 |
Correct |
9 ms |
4172 KB |
Output is correct |
5 |
Correct |
82 ms |
4120 KB |
Output is correct |
6 |
Correct |
71 ms |
4100 KB |
Output is correct |
7 |
Correct |
78 ms |
4100 KB |
Output is correct |
8 |
Correct |
71 ms |
4104 KB |
Output is correct |
9 |
Correct |
88 ms |
4104 KB |
Output is correct |
10 |
Correct |
82 ms |
4092 KB |
Output is correct |
11 |
Correct |
71 ms |
4096 KB |
Output is correct |
12 |
Correct |
78 ms |
4112 KB |
Output is correct |
13 |
Correct |
73 ms |
4048 KB |
Output is correct |
14 |
Correct |
69 ms |
4116 KB |
Output is correct |
15 |
Correct |
81 ms |
4100 KB |
Output is correct |
16 |
Correct |
76 ms |
4116 KB |
Output is correct |
17 |
Correct |
75 ms |
4112 KB |
Output is correct |
18 |
Correct |
1243 ms |
10812 KB |
Output is correct |
19 |
Correct |
1212 ms |
10316 KB |
Output is correct |
20 |
Correct |
1243 ms |
10352 KB |
Output is correct |
21 |
Correct |
1321 ms |
10244 KB |
Output is correct |
22 |
Correct |
1309 ms |
10324 KB |
Output is correct |
23 |
Correct |
1589 ms |
9544 KB |
Output is correct |
24 |
Correct |
1491 ms |
9532 KB |
Output is correct |
25 |
Correct |
1457 ms |
9500 KB |
Output is correct |
26 |
Correct |
56 ms |
5928 KB |
Output is correct |
27 |
Correct |
1217 ms |
10240 KB |
Output is correct |
28 |
Correct |
1142 ms |
10312 KB |
Output is correct |
29 |
Correct |
1677 ms |
9292 KB |
Output is correct |
30 |
Correct |
903 ms |
9936 KB |
Output is correct |
31 |
Correct |
1004 ms |
10596 KB |
Output is correct |
32 |
Correct |
846 ms |
6980 KB |
Output is correct |
33 |
Correct |
1094 ms |
9036 KB |
Output is correct |
34 |
Correct |
970 ms |
8976 KB |
Output is correct |
35 |
Correct |
50 ms |
5952 KB |
Output is correct |
36 |
Correct |
1036 ms |
8924 KB |
Output is correct |
37 |
Correct |
924 ms |
8952 KB |
Output is correct |
38 |
Correct |
814 ms |
8896 KB |
Output is correct |
39 |
Correct |
1140 ms |
8344 KB |
Output is correct |
40 |
Correct |
912 ms |
8232 KB |
Output is correct |
41 |
Correct |
680 ms |
9436 KB |
Output is correct |
42 |
Correct |
658 ms |
9416 KB |
Output is correct |
43 |
Correct |
111 ms |
11700 KB |
Output is correct |
44 |
Correct |
52 ms |
6332 KB |
Output is correct |
45 |
Correct |
55 ms |
9616 KB |
Output is correct |
46 |
Correct |
47 ms |
9664 KB |
Output is correct |
47 |
Correct |
110 ms |
12908 KB |
Output is correct |
48 |
Correct |
120 ms |
12132 KB |
Output is correct |
49 |
Correct |
86 ms |
13172 KB |
Output is correct |
50 |
Correct |
90 ms |
10684 KB |
Output is correct |
51 |
Correct |
88 ms |
9388 KB |
Output is correct |
52 |
Correct |
89 ms |
10556 KB |
Output is correct |
53 |
Correct |
129 ms |
11008 KB |
Output is correct |
54 |
Correct |
130 ms |
12328 KB |
Output is correct |
55 |
Correct |
105 ms |
12468 KB |
Output is correct |
56 |
Correct |
79 ms |
13240 KB |
Output is correct |
57 |
Correct |
81 ms |
13152 KB |
Output is correct |
58 |
Correct |
126 ms |
13452 KB |
Output is correct |
59 |
Correct |
134 ms |
13656 KB |
Output is correct |
60 |
Correct |
112 ms |
13116 KB |
Output is correct |
61 |
Correct |
143 ms |
13572 KB |
Output is correct |
62 |
Correct |
106 ms |
12928 KB |
Output is correct |
63 |
Correct |
103 ms |
12772 KB |
Output is correct |
64 |
Correct |
123 ms |
13620 KB |
Output is correct |
65 |
Correct |
75 ms |
12088 KB |
Output is correct |
66 |
Correct |
1321 ms |
10460 KB |
Output is correct |
67 |
Correct |
1456 ms |
10272 KB |
Output is correct |
68 |
Correct |
1302 ms |
10284 KB |
Output is correct |
69 |
Correct |
973 ms |
10308 KB |
Output is correct |
70 |
Correct |
1454 ms |
10464 KB |
Output is correct |
71 |
Correct |
1442 ms |
10540 KB |
Output is correct |
72 |
Correct |
1510 ms |
10384 KB |
Output is correct |
73 |
Correct |
1284 ms |
10432 KB |
Output is correct |
74 |
Correct |
1299 ms |
10348 KB |
Output is correct |
75 |
Correct |
1331 ms |
10484 KB |
Output is correct |
76 |
Correct |
1049 ms |
10516 KB |
Output is correct |
77 |
Correct |
1052 ms |
10344 KB |
Output is correct |
78 |
Correct |
1045 ms |
10560 KB |
Output is correct |
79 |
Correct |
724 ms |
9520 KB |
Output is correct |
80 |
Correct |
741 ms |
9592 KB |
Output is correct |
81 |
Correct |
714 ms |
9504 KB |
Output is correct |
82 |
Correct |
846 ms |
10932 KB |
Output is correct |
83 |
Correct |
876 ms |
10928 KB |
Output is correct |
84 |
Correct |
829 ms |
10744 KB |
Output is correct |
85 |
Correct |
1468 ms |
12692 KB |
Output is correct |
86 |
Correct |
129 ms |
9408 KB |
Output is correct |
87 |
Correct |
101 ms |
9868 KB |
Output is correct |
88 |
Correct |
1165 ms |
12624 KB |
Output is correct |
89 |
Correct |
1491 ms |
12736 KB |
Output is correct |
90 |
Correct |
1176 ms |
12488 KB |
Output is correct |
91 |
Correct |
1316 ms |
10472 KB |
Output is correct |
92 |
Correct |
1295 ms |
10440 KB |
Output is correct |
93 |
Correct |
1489 ms |
9720 KB |
Output is correct |
94 |
Correct |
1454 ms |
11544 KB |
Output is correct |
95 |
Correct |
1495 ms |
11664 KB |
Output is correct |
96 |
Correct |
1355 ms |
10860 KB |
Output is correct |
97 |
Correct |
829 ms |
11972 KB |
Output is correct |
98 |
Correct |
1106 ms |
12664 KB |
Output is correct |
99 |
Correct |
1588 ms |
12604 KB |
Output is correct |
100 |
Correct |
1558 ms |
12620 KB |
Output is correct |
101 |
Correct |
1603 ms |
12756 KB |
Output is correct |
102 |
Correct |
1621 ms |
12660 KB |
Output is correct |
103 |
Correct |
1466 ms |
11180 KB |
Output is correct |
104 |
Correct |
1446 ms |
11268 KB |
Output is correct |
105 |
Correct |
1347 ms |
11504 KB |
Output is correct |
106 |
Correct |
1184 ms |
11132 KB |
Output is correct |
107 |
Correct |
973 ms |
10908 KB |
Output is correct |
108 |
Correct |
1461 ms |
11836 KB |
Output is correct |
109 |
Correct |
1278 ms |
11012 KB |
Output is correct |