QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#312147#5015. 树czc3 30ms8132kbC++142.9kb2024-01-23 14:21:512024-01-23 14:21:52

Judging History

你现在查看的是最新测评结果

  • [2024-01-23 14:21:52]
  • 评测
  • 测评结果:3
  • 用时:30ms
  • 内存:8132kb
  • [2024-01-23 14:21:51]
  • 提交

answer

#include"tree.h"
#include<bits/stdc++.h>
using namespace std;
const int maxn=1005;
vector<int> V[maxn],V2[maxn];
vector<int> G[maxn];
int Fa[maxn]; 
void solve(int l,int r,int fa,int dep){
	vector<int> now;
	for(int i=l;i<=r;i++) now.push_back(V[dep][i]); 
	int sum=ask(fa,now);
	int sum2=ask(Fa[fa],now); 
	/*
	x+y=r-l+1
	x-y=sum2-sum
	*/
	int delta=sum2-sum;
	int x=(delta+r-l+1)/2;
	if(!x) return ;
	if(x==r-l+1){
		for(int i=l;i<=r;i++){
			Fa[V[dep][i]]=fa;
			G[fa].push_back(V[dep][i]);
		}
		return ;
	}
	if(l==r){
		Fa[V[dep][l]]=fa;
		G[fa].push_back(V[dep][l]);
		return ;
	}
	int mid=(l+r)>>1;
	solve(l,mid,fa,dep);
	solve(mid+1,r,fa,dep);
}
void solver(int n,int A,int B){
	if(n*(n-1)/2<=5e5){
		for(int i=1;i<=n;i++){
			for(int j=i+1;j<=n;j++){
				vector<int> now;
				now.push_back(j);
				if(ask(i,now)==1) answer(i,j);
			}
		} 
		return ;
	} 
	for(int i=2;i<=n;i++){
		vector<int> now;
		now.push_back(i);
		int dep=ask(1,now);
		V[dep].push_back(i);
		V2[dep].push_back(i);
		if(dep==1) G[1].push_back(i),Fa[i]=1; 
	}
	for(int i=2;i<=n;i++){//对于每个dep分别找父亲
		for(auto fa:V2[i-1]){
			if(!V[i].size()) break;
			solve(0,V[i].size()-1,fa,i);
			for(auto x:G[fa]){
				V[i].erase(find(V[i].begin(),V[i].end(),x));
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(auto y:G[i]){
			answer(i,y);
		}
	}
}
/*
感觉这个题目有意思。
考虑一种很 SB 的暴力。
我每个点询问其他所有点当边权为 1 时即可回答。
复杂度: n*(n-1)/2,期望 3pts。
每次多问一些。
我先确定一个点作为根总要好一些吧。
我让 1 把所有点问一次,找到他的儿子。
这样树的形态初步建成。
我感觉 sub 2 那 17pts 卡一卡就能卡过去。
一次多问一些有用的信息是不是好一些。 
树是有父亲的,我找到每个点的父亲就能确定心态。
我第一次 1 问的时候相当于明确了每个点的深度。
一个点的父亲只能是他的深度-1。
考虑寻找自己父亲的过程,如果单独询问,答案要么是 1 或者是 dep*2-1 都可以直接确定。
意味着我可以像解方程一样解出哪些点是他的儿子。
然后可以用一种类似于分治的做法递归处理。
次数 nlogn,集合大小  n^2,足够我通过前三档包了。
还剩最后一部分。
最后一档有点难处理,要求我用线性的询问次数,低于 n^2 的集合大小。
先写再说吧,人类的智慧是有限度的。 
干的漂亮,假了,距离不一定要走到根,他只要走到 lca 就好了。
我们要判断什么? 一段区间中至少存在一个他的儿子吗?
说不明白,判断不了,最简单的反例:1+5=3+3。
换种思路,我让他们先配好对这样一个对对应一个父亲会好做一些吗?
延续刚才的思路,我再多问一次父亲,看他们差就好了,每个点的差要么为1要么为-1就很好。 
*/ 

详细

Subtask #1:

score: 3
Accepted

Test #1:

score: 3
Accepted
time: 26ms
memory: 7792kb

input:

1000 500000 500000
1 2
2 3
2 4
2 5
2 6
3 7
2 8
5 9
5 10
9 11
2 12
9 13
4 14
5 15
12 16
5 17
4 18
4 19
13 20
9 21
19 22
7 23
6 24
14 25
2 26
10 27
14 28
21 29
17 30
8 31
15 32
9 33
22 34
24 35
20 36
6 37
12 38
19 39
31 40
35 41
25 42
11 43
8 44
9 45
12 46
26 47
10 48
6 49
27 50
39 51
33 52
6 53
43 54...

output:

areawavesuitbannerresortfatplasterdeclarationthesearejustrandomwords

result:

ok Orz..Orz..Orz..Orz..Orz

Test #2:

score: 0
Accepted
time: 23ms
memory: 7764kb

input:

1000 500000 500000
1 2
1 3
1 4
4 5
1 6
2 7
1 8
2 9
3 10
4 11
5 12
11 13
9 14
13 15
10 16
10 17
8 18
9 19
13 20
19 21
17 22
19 23
23 24
24 25
22 26
18 27
21 28
22 29
26 30
24 31
30 32
23 33
28 34
29 35
32 36
36 37
32 38
35 39
34 40
40 41
40 42
42 43
42 44
40 45
40 46
40 47
46 48
39 49
49 50
48 51
50 ...

output:

areawavesuitbannerresortfatplasterdeclarationthesearejustrandomwords

result:

ok Orz..Orz..Orz..Orz..Orz

Test #3:

score: 0
Accepted
time: 25ms
memory: 7900kb

input:

1000 500000 500000
498 209
498 647
498 776
498 8
498 382
498 181
498 644
498 331
498 516
498 197
498 630
498 693
498 577
498 572
498 393
498 638
498 94
498 847
498 273
498 535
498 703
498 176
498 605
498 214
498 610
498 416
498 928
498 470
498 753
498 182
498 294
498 514
498 831
498 386
498 935
498 ...

output:

areawavesuitbannerresortfatplasterdeclarationthesearejustrandomwords

result:

ok Orz..Orz..Orz..Orz..Orz

Test #4:

score: 0
Accepted
time: 27ms
memory: 8112kb

input:

1000 500000 500000
1 2
1 3
1 4
1 5
4 6
4 7
7 8
4 9
3 10
5 11
4 12
9 13
12 14
7 15
14 16
9 17
16 18
9 19
13 20
17 21
17 22
18 23
23 24
23 25
18 26
22 27
18 28
25 29
21 30
29 31
31 32
28 33
32 34
26 35
31 36
27 37
29 38
30 39
33 40
38 41
41 42
42 43
43 44
35 45
41 46
43 47
43 48
47 49
45 50
46 51
42 5...

output:

areawavesuitbannerresortfatplasterdeclarationthesearejustrandomwords

result:

ok Orz..Orz..Orz..Orz..Orz

Test #5:

score: 0
Accepted
time: 21ms
memory: 7904kb

input:

1000 500000 500000
1 2
1 3
1 4
1 5
2 6
1 7
1 8
1 9
1 10
1 11
1 12
2 13
1 14
2 15
2 16
2 17
1 18
2 19
2 20
2 21
2 22
1 23
1 24
1 25
2 26
2 27
2 28
2 29
2 30
1 31
2 32
1 33
2 34
1 35
1 36
1 37
1 38
2 39
1 40
1 41
1 42
2 43
2 44
1 45
1 46
2 47
1 48
2 49
1 50
2 51
2 52
1 53
1 54
1 55
1 56
1 57
2 58
1 59...

output:

areawavesuitbannerresortfatplasterdeclarationthesearejustrandomwords

result:

ok Orz..Orz..Orz..Orz..Orz

Test #6:

score: 0
Accepted
time: 23ms
memory: 7896kb

input:

1000 500000 500000
775 723
775 587
775 405
775 383
775 154
775 567
775 561
775 114
775 894
775 79
775 229
775 388
775 165
775 240
775 358
775 287
775 560
775 578
775 220
775 222
775 214
775 86
775 94
775 997
775 531
775 476
775 68
775 838
775 135
775 851
775 478
775 588
775 136
775 689
775 396
775 8...

output:

areawavesuitbannerresortfatplasterdeclarationthesearejustrandomwords

result:

ok Orz..Orz..Orz..Orz..Orz

Test #7:

score: 0
Accepted
time: 30ms
memory: 8132kb

input:

1000 500000 500000
1 2
1 3
3 4
4 5
4 6
5 7
7 8
8 9
8 10
10 11
10 12
12 13
12 14
13 15
15 16
16 17
16 18
17 19
18 20
20 21
21 22
21 23
23 24
24 25
25 26
25 27
27 28
27 29
29 30
29 31
30 32
31 33
33 34
34 35
34 36
36 37
37 38
38 39
39 40
40 41
41 42
41 43
43 44
44 45
44 46
45 47
47 48
48 49
49 50
50 5...

output:

areawavesuitbannerresortfatplasterdeclarationthesearejustrandomwords

result:

ok Orz..Orz..Orz..Orz..Orz

Test #8:

score: 0
Accepted
time: 25ms
memory: 8088kb

input:

1000 500000 500000
862 253
862 745
862 416
862 256
862 515
862 821
862 379
862 494
862 820
862 496
862 648
862 766
862 629
862 106
862 926
862 166
862 729
862 989
862 212
862 522
862 787
862 711
862 962
862 969
862 698
862 750
862 585
862 130
862 831
862 760
862 764
862 314
862 972
862 346
862 275
8...

output:

areawavesuitbannerresortfatplasterdeclarationthesearejustrandomwords

result:

ok Orz..Orz..Orz..Orz..Orz

Test #9:

score: 0
Accepted
time: 21ms
memory: 7828kb

input:

1000 500000 500000
1 2
2 3
3 4
4 5
5 6
6 7
4 8
4 9
5 10
8 11
8 12
3 13
7 14
6 15
6 16
9 17
2 18
1 19
8 20
9 21
8 22
7 23
7 24
5 25
2 26
2 27
3 28
5 29
4 30
9 31
5 32
8 33
1 34
3 35
10 36
7 37
9 38
9 39
9 40
2 41
4 42
6 43
8 44
4 45
10 46
4 47
8 48
9 49
7 50
2 51
5 52
9 53
8 54
1 55
9 56
9 57
9 58
5 ...

output:

areawavesuitbannerresortfatplasterdeclarationthesearejustrandomwords

result:

ok Orz..Orz..Orz..Orz..Orz

Test #10:

score: 0
Accepted
time: 28ms
memory: 7824kb

input:

1000 500000 500000
164 875
164 558
164 722
164 171
164 780
164 498
164 795
164 332
164 1000
164 553
164 354
164 479
164 109
164 802
164 706
164 236
164 958
164 607
164 757
164 197
164 11
164 507
164 572
164 357
164 314
164 653
164 15
164 814
164 9
164 468
164 398
164 232
164 753
164 591
164 478
164 ...

output:

areawavesuitbannerresortfatplasterdeclarationthesearejustrandomwords

result:

ok Orz..Orz..Orz..Orz..Orz

Subtask #2:

score: 0
Wrong Answer

Test #11:

score: 0
Wrong Answer
time: 1ms
memory: 4184kb

input:

100 3000 40000
66 95
66 60
66 93
66 69
66 82
66 24
66 64
66 84
66 42
66 22
66 67
66 54
66 90
66 26
66 41
66 18
66 43
66 68
66 36
66 88
66 33
66 29
66 79
66 6
66 48
66 47
66 8
66 38
66 61
69 97
64 30
38 86
88 14
18 10
54 81
88 25
29 2
18 21
95 46
42 80
93 91
61 62
68 35
47 23
69 17
93 28
18 31
61 70
...

output:

Too many queries

result:

wrong answer Wrong Answer

Subtask #3:

score: 0
Wrong Answer

Test #111:

score: 0
Wrong Answer
time: 13ms
memory: 7804kb

input:

1000 50000 3000000
126 207
937 126
615 937
837 615
500 837
588 500
505 588
353 505
60 353
904 60
656 904
685 656
460 685
614 460
551 614
537 551
858 537
596 858
9 596
738 9
918 738
322 918
940 322
859 940
113 859
110 113
312 110
995 312
443 995
246 443
257 246
238 257
999 238
885 999
976 885
330 976...

output:

Too many queries

result:

wrong answer Wrong Answer

Subtask #4:

score: 0
Wrong Answer

Test #211:

score: 0
Wrong Answer
time: 5ms
memory: 7800kb

input:

990 8500 300000
1 2
1 3
1 4
1 5
2 6
2 7
2 8
3 9
3 10
3 11
4 12
4 13
4 14
5 15
5 16
5 17
6 18
6 19
6 20
7 21
7 22
7 23
8 24
8 25
8 26
9 27
9 28
9 29
10 30
10 31
10 32
11 33
11 34
11 35
12 36
12 37
12 38
13 39
13 40
13 41
14 42
14 43
14 44
15 45
15 46
15 47
16 48
16 49
16 50
17 51
17 52
17 53
18 54
18...

output:

Too many queries

result:

wrong answer Wrong Answer