#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
using pii = pair<int, int>;
#define forn(i, n) for(int i=0; i<(int)n; ++i)
#define forsn(i, s, n) for(int i=s; i<(int)n; ++i)
#define PB push_back
#define F first
#define S second
struct query{
int ind, ve, weight;
query(int Ind, int Ve, int Weight) : ind(Ind), ve(Ve), weight(Weight){}
query(){}
};
struct reversibleChange{
int ind, sind, par, sz;
reversibleChange(int Ind, int Sind, int Par, int Sz) : ind(Ind), sind(Sind), par(Par), sz(Sz){};
};
const int MAXN=50010, MAXE=100010;
int n, m, q, lastLeft[MAXE], lastFull[MAXE], lastSeen[MAXE], lastWeight[MAXE], par[MAXN], size[MAXN];
bool seen[MAXE], notodo[MAXE];
pii edges[MAXE];
vector<query> upd, ask, done;
vector<pii> ans;
vector<reversibleChange> changes;
auto cmp = [](query a, query b){
return a.weight>b.weight;
};
int root(int a){
while(par[a]!=a) a=par[a];
return a;
}
void combine(int edgeInd, bool save){
int a=edges[edgeInd].F, b=edges[edgeInd].S;
int root_a=root(a), root_b=root(b);
if(root_a==root_b) return;
if(size[root_a]<size[root_b]) swap(root_a, root_b);
if(!save) changes.PB(reversibleChange(root_a, root_b, par[root_b], size[root_a]));
size[root_a]+=size[root_b];
par[root_b]=root_a;
}
void rollback(){
while(!changes.empty()){
reversibleChange ch = changes.back();
changes.pop_back();
par[ch.sind]=ch.par;
size[ch.ind]=ch.sz;
}
}
void reset(){
changes.clear();
forn(i, n) par[i]=i, size[i]=1;
}
int main(){
forn(i, MAXE) lastSeen[i]=-2;
done.reserve(MAXE);
scanf("%d %d", &n , &m);
forn(i, m){
int a, b, c; scanf("%d %d %d", &a, &b, &c); --a, --b;
edges[i]={a, b};
done.PB(query(i, i, c));
lastWeight[i]=c;
}
upd.PB(query(-1, 0, lastWeight[0]));
sort(done.begin(), done.end(), cmp);
scanf("%d", &q);
forn(i, q){
int a, b, c; scanf("%d %d %d", &a, &b, &c);
if(a==1) upd.PB(query(i+m, b-1, c));
else ask.PB(query(i+m, b-1, c));
}
int qnum=upd.size(), sq=0, answered=0;
while((sq+1)*(sq+1)<=qnum) ++sq;
for(int l=0; l<qnum && answered<(int)ask.size(); l+=sq){
reset();
int r=min(l+sq, qnum);
int bnd=(r==qnum? 1000000 : upd[r].ind);
int lstQ=answered, updated=0;
forsn(i, l, r) seen[upd[i].ve]=true;
while(lstQ<(int)ask.size() && ask[lstQ].ind<bnd) ++lstQ;
sort(ask.begin()+answered, ask.begin()+lstQ, cmp);
forsn(i, answered, lstQ){
query question = ask[i];
while(updated<(int)done.size() && done[updated].weight>=question.weight){
if(!seen[done[updated].ve]) combine(done[updated].ve, true);
updated++;
}
forsn(j, l, r){
if(upd[j].ind>question.ind) break;
lastSeen[upd[j].ve]=j;
notodo[upd[j].ve]=true;
}
forsn(j, l, r){
if(lastSeen[upd[j].ve]==j && upd[j].weight>=question.weight) combine(upd[j].ve, false);
else if(!notodo[upd[j].ve] && (lastWeight[upd[j].ve]>=question.weight)) combine(upd[j].ve, false);
}
int ret = size[root(question.ve)];
ans.PB({question.ind, ret});
forsn(j, l, r) notodo[upd[j].ve]=false, lastSeen[upd[j].ve]=-2;
rollback();
}
answered=lstQ;
vector<query> le, ri;
forsn(i, l, r) lastSeen[upd[i].ve]=i;
forn(i, done.size()) if(!seen[done[i].ve]) le.PB(done[i]);
forsn(i, l, r) if(lastSeen[upd[i].ve]==i) ri.PB(upd[i]), lastWeight[upd[i].ve]=upd[i].weight;
sort(ri.begin(), ri.end(), cmp);
done.resize(le.size()+ri.size());
merge(le.begin(), le.end(), ri.begin(), ri.end(), done.begin(), cmp);
forsn(i, l, r) seen[upd[i].ve]=false;
}
sort(ans.begin(), ans.end());
for(auto pr:ans) printf("%d\n", pr.S);
}
Compilation message
bridges.cpp: In function 'int main()':
bridges.cpp:70:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
70 | scanf("%d %d", &n , &m);
| ~~~~~^~~~~~~~~~~~~~~~~~
bridges.cpp:72:27: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
72 | int a, b, c; scanf("%d %d %d", &a, &b, &c); --a, --b;
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bridges.cpp:79:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
79 | scanf("%d", &q);
| ~~~~~^~~~~~~~~~
bridges.cpp:81:27: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
81 | int a, b, c; scanf("%d %d %d", &a, &b, &c);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
724 KB |
Output is correct |
2 |
Correct |
2 ms |
724 KB |
Output is correct |
3 |
Correct |
13 ms |
1196 KB |
Output is correct |
4 |
Correct |
6 ms |
1108 KB |
Output is correct |
5 |
Correct |
13 ms |
1184 KB |
Output is correct |
6 |
Correct |
10 ms |
1128 KB |
Output is correct |
7 |
Correct |
12 ms |
1120 KB |
Output is correct |
8 |
Correct |
12 ms |
1120 KB |
Output is correct |
9 |
Correct |
12 ms |
1052 KB |
Output is correct |
10 |
Correct |
12 ms |
1140 KB |
Output is correct |
11 |
Correct |
12 ms |
1108 KB |
Output is correct |
12 |
Correct |
13 ms |
1148 KB |
Output is correct |
13 |
Correct |
13 ms |
1164 KB |
Output is correct |
14 |
Correct |
14 ms |
1140 KB |
Output is correct |
15 |
Correct |
14 ms |
1108 KB |
Output is correct |
16 |
Correct |
12 ms |
1076 KB |
Output is correct |
17 |
Correct |
12 ms |
1088 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
960 ms |
8388 KB |
Output is correct |
2 |
Correct |
954 ms |
8392 KB |
Output is correct |
3 |
Correct |
956 ms |
8304 KB |
Output is correct |
4 |
Correct |
948 ms |
8372 KB |
Output is correct |
5 |
Correct |
949 ms |
8380 KB |
Output is correct |
6 |
Correct |
1234 ms |
8364 KB |
Output is correct |
7 |
Correct |
1189 ms |
8380 KB |
Output is correct |
8 |
Correct |
1179 ms |
8396 KB |
Output is correct |
9 |
Correct |
60 ms |
5196 KB |
Output is correct |
10 |
Correct |
870 ms |
7364 KB |
Output is correct |
11 |
Correct |
823 ms |
7308 KB |
Output is correct |
12 |
Correct |
767 ms |
9060 KB |
Output is correct |
13 |
Correct |
954 ms |
7888 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
669 ms |
6788 KB |
Output is correct |
2 |
Correct |
454 ms |
4812 KB |
Output is correct |
3 |
Correct |
778 ms |
6724 KB |
Output is correct |
4 |
Correct |
683 ms |
6992 KB |
Output is correct |
5 |
Correct |
52 ms |
5180 KB |
Output is correct |
6 |
Correct |
730 ms |
6804 KB |
Output is correct |
7 |
Correct |
659 ms |
6960 KB |
Output is correct |
8 |
Correct |
621 ms |
6716 KB |
Output is correct |
9 |
Correct |
454 ms |
7712 KB |
Output is correct |
10 |
Correct |
404 ms |
7776 KB |
Output is correct |
11 |
Correct |
547 ms |
6264 KB |
Output is correct |
12 |
Correct |
491 ms |
6268 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
102 ms |
11540 KB |
Output is correct |
2 |
Correct |
54 ms |
5184 KB |
Output is correct |
3 |
Correct |
51 ms |
6700 KB |
Output is correct |
4 |
Correct |
39 ms |
6828 KB |
Output is correct |
5 |
Correct |
77 ms |
9944 KB |
Output is correct |
6 |
Correct |
104 ms |
11528 KB |
Output is correct |
7 |
Correct |
96 ms |
9888 KB |
Output is correct |
8 |
Correct |
84 ms |
8380 KB |
Output is correct |
9 |
Correct |
80 ms |
8316 KB |
Output is correct |
10 |
Correct |
89 ms |
8016 KB |
Output is correct |
11 |
Correct |
98 ms |
10244 KB |
Output is correct |
12 |
Correct |
91 ms |
10408 KB |
Output is correct |
13 |
Correct |
89 ms |
10076 KB |
Output is correct |
14 |
Correct |
81 ms |
9956 KB |
Output is correct |
15 |
Correct |
88 ms |
9912 KB |
Output is correct |
16 |
Correct |
109 ms |
11348 KB |
Output is correct |
17 |
Correct |
115 ms |
11388 KB |
Output is correct |
18 |
Correct |
115 ms |
11528 KB |
Output is correct |
19 |
Correct |
105 ms |
11456 KB |
Output is correct |
20 |
Correct |
101 ms |
10452 KB |
Output is correct |
21 |
Correct |
106 ms |
10424 KB |
Output is correct |
22 |
Correct |
97 ms |
11088 KB |
Output is correct |
23 |
Correct |
80 ms |
9284 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
960 ms |
8388 KB |
Output is correct |
2 |
Correct |
954 ms |
8392 KB |
Output is correct |
3 |
Correct |
956 ms |
8304 KB |
Output is correct |
4 |
Correct |
948 ms |
8372 KB |
Output is correct |
5 |
Correct |
949 ms |
8380 KB |
Output is correct |
6 |
Correct |
1234 ms |
8364 KB |
Output is correct |
7 |
Correct |
1189 ms |
8380 KB |
Output is correct |
8 |
Correct |
1179 ms |
8396 KB |
Output is correct |
9 |
Correct |
60 ms |
5196 KB |
Output is correct |
10 |
Correct |
870 ms |
7364 KB |
Output is correct |
11 |
Correct |
823 ms |
7308 KB |
Output is correct |
12 |
Correct |
767 ms |
9060 KB |
Output is correct |
13 |
Correct |
954 ms |
7888 KB |
Output is correct |
14 |
Correct |
669 ms |
6788 KB |
Output is correct |
15 |
Correct |
454 ms |
4812 KB |
Output is correct |
16 |
Correct |
778 ms |
6724 KB |
Output is correct |
17 |
Correct |
683 ms |
6992 KB |
Output is correct |
18 |
Correct |
52 ms |
5180 KB |
Output is correct |
19 |
Correct |
730 ms |
6804 KB |
Output is correct |
20 |
Correct |
659 ms |
6960 KB |
Output is correct |
21 |
Correct |
621 ms |
6716 KB |
Output is correct |
22 |
Correct |
454 ms |
7712 KB |
Output is correct |
23 |
Correct |
404 ms |
7776 KB |
Output is correct |
24 |
Correct |
547 ms |
6264 KB |
Output is correct |
25 |
Correct |
491 ms |
6268 KB |
Output is correct |
26 |
Correct |
929 ms |
8412 KB |
Output is correct |
27 |
Correct |
1132 ms |
8244 KB |
Output is correct |
28 |
Correct |
978 ms |
8528 KB |
Output is correct |
29 |
Correct |
840 ms |
8384 KB |
Output is correct |
30 |
Correct |
1089 ms |
8352 KB |
Output is correct |
31 |
Correct |
1071 ms |
8424 KB |
Output is correct |
32 |
Correct |
1109 ms |
8416 KB |
Output is correct |
33 |
Correct |
983 ms |
8360 KB |
Output is correct |
34 |
Correct |
1016 ms |
8600 KB |
Output is correct |
35 |
Correct |
1002 ms |
8472 KB |
Output is correct |
36 |
Correct |
831 ms |
8344 KB |
Output is correct |
37 |
Correct |
838 ms |
8336 KB |
Output is correct |
38 |
Correct |
842 ms |
8448 KB |
Output is correct |
39 |
Correct |
490 ms |
9104 KB |
Output is correct |
40 |
Correct |
441 ms |
9096 KB |
Output is correct |
41 |
Correct |
467 ms |
9128 KB |
Output is correct |
42 |
Correct |
863 ms |
8128 KB |
Output is correct |
43 |
Correct |
883 ms |
7912 KB |
Output is correct |
44 |
Correct |
877 ms |
7840 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
724 KB |
Output is correct |
2 |
Correct |
2 ms |
724 KB |
Output is correct |
3 |
Correct |
13 ms |
1196 KB |
Output is correct |
4 |
Correct |
6 ms |
1108 KB |
Output is correct |
5 |
Correct |
13 ms |
1184 KB |
Output is correct |
6 |
Correct |
10 ms |
1128 KB |
Output is correct |
7 |
Correct |
12 ms |
1120 KB |
Output is correct |
8 |
Correct |
12 ms |
1120 KB |
Output is correct |
9 |
Correct |
12 ms |
1052 KB |
Output is correct |
10 |
Correct |
12 ms |
1140 KB |
Output is correct |
11 |
Correct |
12 ms |
1108 KB |
Output is correct |
12 |
Correct |
13 ms |
1148 KB |
Output is correct |
13 |
Correct |
13 ms |
1164 KB |
Output is correct |
14 |
Correct |
14 ms |
1140 KB |
Output is correct |
15 |
Correct |
14 ms |
1108 KB |
Output is correct |
16 |
Correct |
12 ms |
1076 KB |
Output is correct |
17 |
Correct |
12 ms |
1088 KB |
Output is correct |
18 |
Correct |
960 ms |
8388 KB |
Output is correct |
19 |
Correct |
954 ms |
8392 KB |
Output is correct |
20 |
Correct |
956 ms |
8304 KB |
Output is correct |
21 |
Correct |
948 ms |
8372 KB |
Output is correct |
22 |
Correct |
949 ms |
8380 KB |
Output is correct |
23 |
Correct |
1234 ms |
8364 KB |
Output is correct |
24 |
Correct |
1189 ms |
8380 KB |
Output is correct |
25 |
Correct |
1179 ms |
8396 KB |
Output is correct |
26 |
Correct |
60 ms |
5196 KB |
Output is correct |
27 |
Correct |
870 ms |
7364 KB |
Output is correct |
28 |
Correct |
823 ms |
7308 KB |
Output is correct |
29 |
Correct |
767 ms |
9060 KB |
Output is correct |
30 |
Correct |
954 ms |
7888 KB |
Output is correct |
31 |
Correct |
669 ms |
6788 KB |
Output is correct |
32 |
Correct |
454 ms |
4812 KB |
Output is correct |
33 |
Correct |
778 ms |
6724 KB |
Output is correct |
34 |
Correct |
683 ms |
6992 KB |
Output is correct |
35 |
Correct |
52 ms |
5180 KB |
Output is correct |
36 |
Correct |
730 ms |
6804 KB |
Output is correct |
37 |
Correct |
659 ms |
6960 KB |
Output is correct |
38 |
Correct |
621 ms |
6716 KB |
Output is correct |
39 |
Correct |
454 ms |
7712 KB |
Output is correct |
40 |
Correct |
404 ms |
7776 KB |
Output is correct |
41 |
Correct |
547 ms |
6264 KB |
Output is correct |
42 |
Correct |
491 ms |
6268 KB |
Output is correct |
43 |
Correct |
102 ms |
11540 KB |
Output is correct |
44 |
Correct |
54 ms |
5184 KB |
Output is correct |
45 |
Correct |
51 ms |
6700 KB |
Output is correct |
46 |
Correct |
39 ms |
6828 KB |
Output is correct |
47 |
Correct |
77 ms |
9944 KB |
Output is correct |
48 |
Correct |
104 ms |
11528 KB |
Output is correct |
49 |
Correct |
96 ms |
9888 KB |
Output is correct |
50 |
Correct |
84 ms |
8380 KB |
Output is correct |
51 |
Correct |
80 ms |
8316 KB |
Output is correct |
52 |
Correct |
89 ms |
8016 KB |
Output is correct |
53 |
Correct |
98 ms |
10244 KB |
Output is correct |
54 |
Correct |
91 ms |
10408 KB |
Output is correct |
55 |
Correct |
89 ms |
10076 KB |
Output is correct |
56 |
Correct |
81 ms |
9956 KB |
Output is correct |
57 |
Correct |
88 ms |
9912 KB |
Output is correct |
58 |
Correct |
109 ms |
11348 KB |
Output is correct |
59 |
Correct |
115 ms |
11388 KB |
Output is correct |
60 |
Correct |
115 ms |
11528 KB |
Output is correct |
61 |
Correct |
105 ms |
11456 KB |
Output is correct |
62 |
Correct |
101 ms |
10452 KB |
Output is correct |
63 |
Correct |
106 ms |
10424 KB |
Output is correct |
64 |
Correct |
97 ms |
11088 KB |
Output is correct |
65 |
Correct |
80 ms |
9284 KB |
Output is correct |
66 |
Correct |
929 ms |
8412 KB |
Output is correct |
67 |
Correct |
1132 ms |
8244 KB |
Output is correct |
68 |
Correct |
978 ms |
8528 KB |
Output is correct |
69 |
Correct |
840 ms |
8384 KB |
Output is correct |
70 |
Correct |
1089 ms |
8352 KB |
Output is correct |
71 |
Correct |
1071 ms |
8424 KB |
Output is correct |
72 |
Correct |
1109 ms |
8416 KB |
Output is correct |
73 |
Correct |
983 ms |
8360 KB |
Output is correct |
74 |
Correct |
1016 ms |
8600 KB |
Output is correct |
75 |
Correct |
1002 ms |
8472 KB |
Output is correct |
76 |
Correct |
831 ms |
8344 KB |
Output is correct |
77 |
Correct |
838 ms |
8336 KB |
Output is correct |
78 |
Correct |
842 ms |
8448 KB |
Output is correct |
79 |
Correct |
490 ms |
9104 KB |
Output is correct |
80 |
Correct |
441 ms |
9096 KB |
Output is correct |
81 |
Correct |
467 ms |
9128 KB |
Output is correct |
82 |
Correct |
863 ms |
8128 KB |
Output is correct |
83 |
Correct |
883 ms |
7912 KB |
Output is correct |
84 |
Correct |
877 ms |
7840 KB |
Output is correct |
85 |
Correct |
1705 ms |
12136 KB |
Output is correct |
86 |
Correct |
406 ms |
8084 KB |
Output is correct |
87 |
Correct |
301 ms |
8164 KB |
Output is correct |
88 |
Correct |
1382 ms |
10668 KB |
Output is correct |
89 |
Correct |
1497 ms |
12244 KB |
Output is correct |
90 |
Correct |
1392 ms |
10580 KB |
Output is correct |
91 |
Correct |
974 ms |
8352 KB |
Output is correct |
92 |
Correct |
959 ms |
8424 KB |
Output is correct |
93 |
Correct |
1212 ms |
8360 KB |
Output is correct |
94 |
Correct |
1344 ms |
10440 KB |
Output is correct |
95 |
Correct |
1302 ms |
10660 KB |
Output is correct |
96 |
Correct |
1374 ms |
10472 KB |
Output is correct |
97 |
Correct |
672 ms |
11536 KB |
Output is correct |
98 |
Correct |
1714 ms |
9948 KB |
Output is correct |
99 |
Correct |
1571 ms |
12056 KB |
Output is correct |
100 |
Correct |
1608 ms |
11992 KB |
Output is correct |
101 |
Correct |
1568 ms |
12260 KB |
Output is correct |
102 |
Correct |
1619 ms |
12176 KB |
Output is correct |
103 |
Correct |
1541 ms |
11064 KB |
Output is correct |
104 |
Correct |
1591 ms |
10940 KB |
Output is correct |
105 |
Correct |
1677 ms |
10436 KB |
Output is correct |
106 |
Correct |
1560 ms |
10212 KB |
Output is correct |
107 |
Correct |
806 ms |
12024 KB |
Output is correct |
108 |
Correct |
1472 ms |
11820 KB |
Output is correct |
109 |
Correct |
1328 ms |
9716 KB |
Output is correct |