Skip to content

Commit 07a47cb

Browse files
committed
solve more questions
1 parent 4f6cafe commit 07a47cb

File tree

1 file changed

+8
-20
lines changed

1 file changed

+8
-20
lines changed

CodeChef/GERALD007.cpp

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -110,30 +110,18 @@ int v[MAXN], ans[MAXN], cc, cc2;
110110
Query Q[MAXN];
111111
UnionFind UF;
112112

113-
//Para o UF 1
114-
void add(int p) {
113+
void add(int p, int k, int &c){
114+
115115
int u = edge[p].fi, v = edge[p].se;
116116

117-
bool r = UF.sameSet(u,v,0);
117+
bool r = UF.sameSet(u,v,k);
118118

119119
if(!r){
120-
UF.unir(u,v,0);
121-
cc--;
120+
UF.unir(u,v,k);
121+
c--;
122122
}
123123
}
124124

125-
//Para o UF 2
126-
void add2(int p) {
127-
int u = edge[p].fi, v = edge[p].se;
128-
129-
bool r = UF.sameSet(u,v,1);
130-
131-
if(!r) {
132-
cc2--;
133-
UF.unir(u,v,1);
134-
}
135-
}
136-
137125
void MO(){
138126
sort(Q, Q+K);
139127

@@ -162,20 +150,20 @@ void MO(){
162150
rMO = l-1;
163151
lMO = l;
164152

165-
while(rMO < r) add2(++rMO);
153+
while(rMO < r) add(++rMO, 1 , cc2);
166154

167155
rMO = min(M , (l/t) * t + t -1);
168156
}
169157
else{
170158
lMO = min(M , (l/t) * t + t);
171159

172160
//To adicionando do r anterior até r o r atual
173-
while(rMO < r) add(++rMO);
161+
while(rMO < r) add(++rMO, 0, cc);
174162

175163
cc2 = cc;
176164

177165
//To adicionando da l até SQRT
178-
while(lMO > l) add2(--lMO);
166+
while(lMO > l) add(--lMO, 1, cc2);
179167
}
180168

181169
//Reseto a todo momento o UF2 por causa do l

0 commit comments

Comments
 (0)