#include "werewolf.h"
#include <iostream>
using namespace std;
const int nmax=200005;
int i,j,n,nr,m;
int tt[nmax],rg[nmax],T[nmax];
int finds(int x)
{
while(x!=tt[x])
x=tt[x];
return x;
}
void unite(int A,int B)
{
if(rg[A]<rg[B]) swap(A,B);
tt[B]=A;rg[A]+=rg[B];
}
vector<int> v[nmax];
struct arbore
{
int t[20][nmax],l[nmax],r[nmax],rep[nmax];
vector<int> ad[nmax];
void dfs(int x)
{
++nr;l[x]=nr;rep[nr]=x;
for(int i=0;i<ad[x].size();i++)
dfs(ad[x][i]);
r[x]=nr;
}
void solve()
{
for(i=1;i<=18;i++)
for(j=0;j<n;j++)
{
if(t[i-1][j]!=-1)t[i][j]=t[i-1][t[i-1][j]];
else t[i][j]=-1;
}
int rad=0;
for(i=0;i<n;i++)
if(t[0][i]!=-1) ad[t[0][i]].push_back(i);
else rad=i;
nr=0;
dfs(rad);
}
int cb(int x,int lim,int par)
{
for(int p=18;p>=0;p--)
if(t[p][x]!=-1&&((t[p][x]>=lim&&par==0)||(t[p][x]<=lim&&par==1)))
x=t[p][x];
return x;
}
}mic,mare;
int aib[nmax],pica[nmax];
inline int lbit(int x)
{
return ((x^(x-1))&x);
}
void update(int poz,int val)
{
for(int idx=poz;idx<=n;idx+=lbit(idx))
aib[idx]+=val;
}
int compute(int poz)
{
int ret=0;
for(int idx=poz;idx>0;idx-=lbit(idx))
ret+=aib[idx];
return ret;
}
struct ev
{
int ll,rr,wh,sgn;
};
vector<ev> qr[nmax];
int cat[nmax];
void sweep()
{
for(i=1;i<=n;i++)
{
pica[mic.rep[i]]=i;
}
for(i=1;i<=n;i++)
{
update(pica[mare.rep[i]],1);
for(j=0;j<qr[i].size();j++)
cat[qr[i][j].wh]+=(compute(qr[i][j].rr)-compute(qr[i][j].ll-1))*qr[i][j].sgn;
}
}
vector<int> check_validity(int N, vector<int> X, vector<int> Y,
vector<int> S, vector<int> E,
vector<int> L, vector<int> R) {
int Q = S.size();
m=X.size();n=N;
std::vector<int> A(Q);
for(int i=0;i<m;i++)
{
v[X[i]].push_back(Y[i]);
v[Y[i]].push_back(X[i]);
}
for(i=0;i<n;i++)
mic.t[0][i]=mare.t[0][i]=-1;
for(i=0;i<n;i++)
{
tt[i]=i;rg[i]=1;T[i]=i;
for(j=0;j<v[i].size();j++)
if(v[i][j]<i&&finds(v[i][j])!=finds(i))
{
mic.t[0][T[finds(v[i][j])]]=i;
unite(finds(i),finds(v[i][j]));
}
T[finds(i)]=i;
}
mic.solve();
for(i=n-1;i>=0;i--)
{
tt[i]=i;rg[i]=1;T[i]=i;
for(j=0;j<v[i].size();j++)
if(v[i][j]>i&&finds(v[i][j])!=finds(i))
{
mare.t[0][T[finds(v[i][j])]]=i;
unite(finds(i),finds(v[i][j]));
}
T[finds(i)]=i;
}
mare.solve();
int q=L.size(),ss,ee;
for(i=0;i<q;i++)
{
ss=mare.cb(S[i],L[i],0);ee=mic.cb(E[i],R[i],1);
qr[mare.l[ss]-1].push_back({mic.l[ee],mic.r[ee],i,-1});
qr[mare.r[ss]].push_back({mic.l[ee],mic.r[ee],i,1});
}
sweep();
for(i=0;i<q;i++)
{
if(cat[i]) A[i]=1;
else A[i]=0;
}
return A;
}
Compilation message
werewolf.cpp: In member function 'void arbore::dfs(int)':
werewolf.cpp:26:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<ad[x].size();i++)
~^~~~~~~~~~~~~
werewolf.cpp: In function 'void sweep()':
werewolf.cpp:85:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(j=0;j<qr[i].size();j++)
~^~~~~~~~~~~~~
werewolf.cpp: In function 'std::vector<int> check_validity(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
werewolf.cpp:105:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(j=0;j<v[i].size();j++)
~^~~~~~~~~~~~
werewolf.cpp:117:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(j=0;j<v[i].size();j++)
~^~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
20 ms |
19448 KB |
Output is correct |
2 |
Correct |
20 ms |
19460 KB |
Output is correct |
3 |
Correct |
19 ms |
19524 KB |
Output is correct |
4 |
Correct |
23 ms |
19680 KB |
Output is correct |
5 |
Correct |
19 ms |
19732 KB |
Output is correct |
6 |
Correct |
19 ms |
19752 KB |
Output is correct |
7 |
Correct |
22 ms |
19752 KB |
Output is correct |
8 |
Correct |
25 ms |
19892 KB |
Output is correct |
9 |
Correct |
18 ms |
19892 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
20 ms |
19448 KB |
Output is correct |
2 |
Correct |
20 ms |
19460 KB |
Output is correct |
3 |
Correct |
19 ms |
19524 KB |
Output is correct |
4 |
Correct |
23 ms |
19680 KB |
Output is correct |
5 |
Correct |
19 ms |
19732 KB |
Output is correct |
6 |
Correct |
19 ms |
19752 KB |
Output is correct |
7 |
Correct |
22 ms |
19752 KB |
Output is correct |
8 |
Correct |
25 ms |
19892 KB |
Output is correct |
9 |
Correct |
18 ms |
19892 KB |
Output is correct |
10 |
Correct |
26 ms |
20940 KB |
Output is correct |
11 |
Correct |
26 ms |
21220 KB |
Output is correct |
12 |
Correct |
26 ms |
21228 KB |
Output is correct |
13 |
Correct |
26 ms |
21444 KB |
Output is correct |
14 |
Correct |
28 ms |
21552 KB |
Output is correct |
15 |
Correct |
26 ms |
21692 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1229 ms |
93936 KB |
Output is correct |
2 |
Correct |
948 ms |
103936 KB |
Output is correct |
3 |
Correct |
926 ms |
110564 KB |
Output is correct |
4 |
Correct |
940 ms |
117556 KB |
Output is correct |
5 |
Correct |
964 ms |
126060 KB |
Output is correct |
6 |
Correct |
1041 ms |
135856 KB |
Output is correct |
7 |
Correct |
1065 ms |
142376 KB |
Output is correct |
8 |
Correct |
836 ms |
154224 KB |
Output is correct |
9 |
Correct |
583 ms |
158860 KB |
Output is correct |
10 |
Correct |
518 ms |
167200 KB |
Output is correct |
11 |
Correct |
568 ms |
175464 KB |
Output is correct |
12 |
Correct |
576 ms |
183264 KB |
Output is correct |
13 |
Correct |
1190 ms |
199192 KB |
Output is correct |
14 |
Correct |
1198 ms |
206884 KB |
Output is correct |
15 |
Correct |
1226 ms |
215100 KB |
Output is correct |
16 |
Correct |
1283 ms |
223396 KB |
Output is correct |
17 |
Correct |
913 ms |
224832 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
20 ms |
19448 KB |
Output is correct |
2 |
Correct |
20 ms |
19460 KB |
Output is correct |
3 |
Correct |
19 ms |
19524 KB |
Output is correct |
4 |
Correct |
23 ms |
19680 KB |
Output is correct |
5 |
Correct |
19 ms |
19732 KB |
Output is correct |
6 |
Correct |
19 ms |
19752 KB |
Output is correct |
7 |
Correct |
22 ms |
19752 KB |
Output is correct |
8 |
Correct |
25 ms |
19892 KB |
Output is correct |
9 |
Correct |
18 ms |
19892 KB |
Output is correct |
10 |
Correct |
26 ms |
20940 KB |
Output is correct |
11 |
Correct |
26 ms |
21220 KB |
Output is correct |
12 |
Correct |
26 ms |
21228 KB |
Output is correct |
13 |
Correct |
26 ms |
21444 KB |
Output is correct |
14 |
Correct |
28 ms |
21552 KB |
Output is correct |
15 |
Correct |
26 ms |
21692 KB |
Output is correct |
16 |
Correct |
1229 ms |
93936 KB |
Output is correct |
17 |
Correct |
948 ms |
103936 KB |
Output is correct |
18 |
Correct |
926 ms |
110564 KB |
Output is correct |
19 |
Correct |
940 ms |
117556 KB |
Output is correct |
20 |
Correct |
964 ms |
126060 KB |
Output is correct |
21 |
Correct |
1041 ms |
135856 KB |
Output is correct |
22 |
Correct |
1065 ms |
142376 KB |
Output is correct |
23 |
Correct |
836 ms |
154224 KB |
Output is correct |
24 |
Correct |
583 ms |
158860 KB |
Output is correct |
25 |
Correct |
518 ms |
167200 KB |
Output is correct |
26 |
Correct |
568 ms |
175464 KB |
Output is correct |
27 |
Correct |
576 ms |
183264 KB |
Output is correct |
28 |
Correct |
1190 ms |
199192 KB |
Output is correct |
29 |
Correct |
1198 ms |
206884 KB |
Output is correct |
30 |
Correct |
1226 ms |
215100 KB |
Output is correct |
31 |
Correct |
1283 ms |
223396 KB |
Output is correct |
32 |
Correct |
913 ms |
224832 KB |
Output is correct |
33 |
Correct |
1218 ms |
235020 KB |
Output is correct |
34 |
Correct |
407 ms |
235020 KB |
Output is correct |
35 |
Correct |
1141 ms |
256516 KB |
Output is correct |
36 |
Correct |
1068 ms |
263432 KB |
Output is correct |
37 |
Correct |
1226 ms |
272392 KB |
Output is correct |
38 |
Correct |
1178 ms |
279672 KB |
Output is correct |
39 |
Correct |
1018 ms |
293308 KB |
Output is correct |
40 |
Correct |
1067 ms |
302372 KB |
Output is correct |
41 |
Correct |
863 ms |
305628 KB |
Output is correct |
42 |
Correct |
594 ms |
311360 KB |
Output is correct |
43 |
Correct |
1084 ms |
327756 KB |
Output is correct |
44 |
Correct |
1052 ms |
332508 KB |
Output is correct |
45 |
Correct |
671 ms |
344064 KB |
Output is correct |
46 |
Correct |
762 ms |
353044 KB |
Output is correct |
47 |
Correct |
1048 ms |
360624 KB |
Output is correct |
48 |
Correct |
1149 ms |
367932 KB |
Output is correct |
49 |
Correct |
1184 ms |
376588 KB |
Output is correct |
50 |
Correct |
1212 ms |
383780 KB |
Output is correct |
51 |
Correct |
868 ms |
394172 KB |
Output is correct |
52 |
Correct |
977 ms |
405488 KB |
Output is correct |