QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#549134#3279. 经典游戏Flamire#0 186ms153764kbC++172.4kb2024-09-06 10:05:272024-09-06 10:05:27

Judging History

This is the latest submission verdict.

  • [2024-09-06 10:05:27]
  • Judged
  • Verdict: 0
  • Time: 186ms
  • Memory: 153764kb
  • [2024-09-06 10:05:27]
  • Submitted

answer

#include <bits/stdc++.h>
#define N 1000011
#define M N*23
using namespace std;
int n,m;
vector<int> G[N];
int ch[M][2],cnt[M],rt[N],gb[M],a[N];
struct BIT
{
	int c[N];
	int query(int x){int ans=0;for(;x;x-=x&-x)ans^=c[x];return ans;}
	void add(int x,int p){for(;x<=n;x+=x&-x)c[x]^=p;}
	void add(int l,int r,int p){if(l>r)return;add(l,p);add(r+1,-p);}
}Bt,Bx;
void ins(int v,int x)
{
	for(int i=19;~i;--i)
	{
		++cnt[x];
		if(!ch[x][v>>i&1])
		{
			int nw=gb[gb[0]--];ch[nw][0]=ch[nw][1]=cnt[nw]=0;
			ch[x][v>>i&1]=nw;
		}
		x=ch[x][v>>i&1];
	}
	++cnt[x];
}
void del(int v,int x)
{
	for(int i=19;~i;--i)
	{
		if(!--cnt[x])gb[++gb[0]]=x;
		x=ch[x][v>>i&1];
	}
	if(!--cnt[x])gb[++gb[0]]=x;
}
int search(int x,int tag,int v)
{
	int ans=0;
	for(int i=19;~i;--i)
	{
		if(v>>i&1)ans+=cnt[ch[x][((v^tag)>>i&1)^1]];
		x=ch[x][(v^tag)>>i&1];
	}
	ans+=cnt[x];
	return ans;
}
int S,T,C,Cu,Cv,D,dep[N],fa[N],dfn[N],siz[N],rk[N],clk;
void dfsd(int u,int F)
{
	dep[u]=dep[F]+1;fa[u]=F;
	for(int v:G[u])if(v^F)dfsd(v,u);
}
int h[N],fah[N],X[N];
void dfs(int u,int F,int H)
{
	fa[u]=F;
	dfn[u]=++clk;rk[clk]=u;siz[u]=1;fah[u]=H;
	for(int v:G[u])if(v^F)dfs(v,u,H+1),siz[u]+=siz[v],h[u]=max(h[u],h[v]+1);
}
void addnode(int u)
{
	Bt.add(dfn[u],dfn[u]+siz[u]-1,fah[u]);
	Bt.add(1,dfn[u]-1,h[u]);Bt.add(dfn[u]+siz[u],n,h[u]);
	if(fa[u]&&u!=Cu&&u!=Cv)
	{
		del(X[u],rt[fa[u]]);
		X[u]^=h[u]^max(h[u],fah[u]);
		ins(X[u],rt[fa[u]]);
	}
	Bx.add(dfn[u]+1,dfn[u]+siz[u]-1,fah[u]);
	Bx.add(1,dfn[u]-1,h[u]);Bx.add(dfn[u]+siz[u],n,h[u]);
	Bx.add(dfn[u],dfn[u],max(h[u],fah[u]));
}
bool check(int y){return Bx.query(dfn[y])<=max(h[y],fah[y]);}
int main()
{
	scanf("%*d%d%d",&n,&m);
	for(int i=1;i<n;++i){int u,v;scanf("%d%d",&u,&v);G[u].push_back(v);G[v].push_back(u);}
	for(int i=1;i<=n;++i)scanf("%d",a+i);
	dfsd(1,0);
	for(int i=1;i<=n;++i)if(dep[i]>dep[S])S=i;
	dfsd(S,0);
	for(int i=1;i<=n;++i)if(dep[i]>dep[T])T=i;
	D=dep[T]-1;
	C=T;
	for(int _=0;_<D/2;++_)C=fa[C];
	for(int i=M-1;i;--i)gb[++gb[0]]=i;
	if(D&1)
	{
		Cu=C,Cv=fa[C];
		dfs(Cu,Cv,(D+1)/2);
		dfs(Cv,Cu,(D+1)/2);
	}
	else
	{
		dfs(C,0,D/2);
	}
	for(int i=1;i<=n;++i)if(a[i])addnode(i);
	while(m--)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		addnode(x);
		int ans=0;
		for(int z:G[y])ans+=check(z);
		ans+=check(y);
		printf("%d\n",ans);
	}
	fclose(stdin);fclose(stdout);return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 68ms
memory: 121888kb

input:

16
5 5
4 3
3 2
3 5
3 1
0 1 1 0 1
5 2
5 5
4 2
2 1
3 2

output:

2
2
2
2
2

result:

wrong answer 1st numbers differ - expected: '1', found: '2'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Wrong Answer

Test #9:

score: 0
Wrong Answer
time: 179ms
memory: 153764kb

input:

13
100000 100000
91699 52443
52443 41748
41748 32330
32330 42277
42277 80707
80707 97074
97074 84439
84439 73656
73656 94232
94232 19271
19271 64725
64725 68032
68032 15074
15074 98785
98785 84234
84234 63617
63617 85713
85713 32965
32965 90099
90099 95398
95398 84273
84273 90891
90891 89305
89305 9...

output:

3
3
3
3
1
2
3
3
3
3
1
1
3
3
2
2
2
2
1
3
2
1
3
2
1
3
1
3
3
2
3
3
3
3
2
2
1
1
3
2
3
3
1
2
3
2
2
2
3
2
3
3
3
1
1
1
3
3
3
3
1
3
3
3
2
3
2
3
3
3
3
1
1
2
3
3
3
3
2
3
3
1
1
1
1
2
2
2
3
1
2
3
3
3
3
1
2
3
3
3
2
2
1
3
3
3
3
3
3
1
3
3
2
2
3
2
3
1
3
1
3
3
2
1
3
2
3
3
1
1
3
3
1
3
3
3
3
3
3
1
3
1
3
3
3
1
3
3
3
3
...

result:

wrong answer 1st numbers differ - expected: '2', found: '3'

Subtask #5:

score: 0
Time Limit Exceeded

Test #13:

score: 0
Time Limit Exceeded

input:

12
100000 100000
93214 84598
93214 56491
93214 84251
93214 79335
93214 71720
93214 77307
93214 95507
93214 95410
93214 40328
93214 86071
93214 45088
93214 66766
93214 79723
93214 88378
93214 89470
93214 88357
93214 88637
93214 30576
93214 90846
93214 53961
93214 41155
93214 46341
93214 83568
93214 9...

output:

100000
2
2
2
2
99996
2
2
2
99996
99999
2
2
99996
2
99995
2
2
2
99988
99992
99993
2
99994
2
99991
2
2
99988
99989
99980
2
99978
99980
2
99981
99980
2
2
99985
2
99974
2
2
99975
2
2
2
2
99972
99967
2
2
2
2
2
99972
99974
99973
2
99969
99970
99971
99967
99973
2
2
2
99969
2
2
2
99963
2
99961
2
99959
2
2
2...

result:


Subtask #6:

score: 0
Wrong Answer

Test #17:

score: 0
Wrong Answer
time: 186ms
memory: 143768kb

input:

11
100000 100000
2 29108
3 77506
4 7190
5 41884
7 9630
14 78381
15 10036
16 13569
19 80204
20 17573
24 86568
26 88304
28 91742
31 50889
32 29659
33 7909
37 61160
38 88144
40 36396
41 8142
43 20787
46 75458
48 23406
50 56495
61 74778
63 97662
70 75429
73 52031
76 49902
77 56882
81 13357
85 70152
89 3...

output:

8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
...

result:

wrong answer 1st numbers differ - expected: '0', found: '8'

Subtask #7:

score: 0
Skipped

Dependency #1:

0%

Subtask #8:

score: 0
Skipped

Dependency #1:

0%