QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#115680#4926. Where Is the Root?myrcella0 4ms3508kbC++143.0kb2023-06-26 15:49:002023-06-26 15:49:01

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-06-26 15:49:01]
  • 评测
  • 测评结果:0
  • 用时:4ms
  • 内存:3508kb
  • [2023-06-26 15:49:00]
  • 提交

answer

// by szh
#include<bits/stdc++.h>
using namespace std;

typedef long long LL;

#define F first
#define S second
#define pii pair<LL, LL>
#define pb push_back
#define debug(x) cerr << #x << "=" << x << endl
#define pq priority_queue
#define inf 0x3f
#define rep(i,a,b) for (int i=a; i < (b); i++)
#define MP make_pair
#define SZ(x) (static_cast<int>(x.size()))
#define MOD 1000000007
#define ALL(x) x.begin(), x.end()
void inc(int &a, int b) {a = (a+b)%MOD;}
void dec(int &a, int b) {a = (a-b+MOD)%MOD;}
int prod(int a,int b) {return LL(a)*LL(b)%MOD;}
int lowbit(int x) {return x&(-x);}

const int maxn = 555;

int n;
int deg[maxn];
vector <int> edge[maxn];

vector <int> leaf, leaff, candidate;

int main() {
  //debug(((10 <= 9) ? 83: max(10, int(83 * (1 - log(10 - 6.0) / 7)))));
  // freopen("input.txt","r",stdin);
  cin >> n;
  rep(i, 1, n) {
	int u, v;
	cin >> u >> v;
	edge[u].pb(v);
	edge[v].pb(u);
	deg[u]++;
	deg[v]++;
  }
  /*
  rep(i, 1, n + 1) {
	if (deg[i] == 1) continue;
	cout << "? " << n - 1;
    rep(j, 1, n + 1) if (i != j) cout << " " << j;
    cout << endl;
    cout.flush();
    string s;
    cin >> s;
    if (s == "NO") {
	  cout << "! " << i << endl;
	  cout.flush();
	  return 0;
	}
  }
  // root is a leaf
  
  if (SZ(leaf) == 1) {
	cout << "! " << leaf[0] << endl;
  }
  for (auto it : leaf) {
	cout << "? " << SZ(leaf) - 1;
	for (auto itt : leaf) {
	  if (it == itt) continue;
	  cout << " " << itt;
	}
	cout << endl;
	string s;
	cin >> s;
	if (s == "NO") {
	  cout << "! " << it << endl;
	  return 0;
    }
  }
  */
  //idea: check leaves first, then go through non-leaf node
  rep(i, 1, n + 1) {
	if (deg[i] == 1) leaf.pb(i);
	else candidate.pb(i);
  }
  leaff = leaf;
  for (auto it : candidate) leaf.pb(it);
  while (SZ(leaf) > 2) {
	  int mid = (SZ(leaf) + 1) / 2;
	  cout << "? " << mid;
	  rep(i, 0, mid) cout << " " << leaf[i];
	  cout << endl;
	  string ss; cin >> ss;
	  if (ss == "YES") {
		while (SZ(leaf) > mid) leaf.pop_back();
	  }
	  else {
		vector <int> tmp;
		rep(i, mid, SZ(leaf)) tmp.pb(leaf[i]);
		leaf = tmp;
	  }
  }
  if (SZ(leaf) == 1) cout << "! " << leaf[0] << endl;
  else {
	if (deg[leaf[0]] == 1 and deg[leaf[0]] == 1) {
      cout << "? " << SZ(leaff) - 1;
	  for (auto it : leaff) if (it != leaf[0]) cout << " " << it;
	  cout << endl;
	  string ss;
	  cin >> ss;
	  if (ss == "NO") cout << "! " << leaf[0] << endl;
	  else cout << "! " << leaf[1] << endl;
    } else if (deg[leaf[0]] == 1) {
	  cout << "? " << SZ(leaff);
	  for (auto it : leaff) cout << " " << it;
	  cout << endl;
	  string ss;
	  cin >> ss;
	  if (ss == "YES") cout << "! " << leaf[0] << endl;
	  else cout << "! " << leaf[1] << endl;
	} else {
	  cout << "? " << n - 1;
	  rep(i, 1, n + 1) if (i != leaf[0]) cout << " " << i;
	  cout << endl;
	  string ss;
	  cin >> ss;
	  if (ss == "NO") cout <<"! " << leaf[0] << endl;
	  else cout <<"! " << leaf[1] << endl;
	}
  }
  return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 7
Accepted
time: 1ms
memory: 3440kb

input:

7
4 1
1 2
4 3
3 5
3 6
4 7
NO
NO

output:

? 4 2 5 6 7
? 2 1 3
! 4

result:

ok OK

Test #2:

score: 0
Accepted
time: 1ms
memory: 3476kb

input:

9
5 9
8 6
2 8
1 8
3 6
6 7
1 4
4 5
YES
YES
YES
NO

output:

? 5 2 3 7 9 1
? 3 2 3 7
? 2 2 3
? 3 3 7 9
! 2

result:

ok OK

Test #3:

score: 0
Accepted
time: 1ms
memory: 3396kb

input:

9
6 8
2 5
5 1
4 3
5 9
6 3
6 1
7 5
YES
NO
NO

output:

? 5 2 4 7 8 9
? 3 2 4 7
? 4 2 4 7 9
! 8

result:

ok OK

Test #4:

score: 0
Accepted
time: 0ms
memory: 3508kb

input:

9
1 8
9 4
7 8
5 7
3 9
2 5
9 1
4 6
YES
YES
NO

output:

? 5 2 3 6 1 4
? 3 2 3 6
? 2 2 3
! 6

result:

ok OK

Test #5:

score: 0
Accepted
time: 1ms
memory: 3508kb

input:

9
7 1
8 4
2 8
5 2
2 3
1 2
1 9
9 6
YES
YES
YES
NO

output:

? 5 3 4 5 6 7
? 3 3 4 5
? 2 3 4
? 4 4 5 6 7
! 3

result:

ok OK

Test #6:

score: 0
Accepted
time: 1ms
memory: 3408kb

input:

9
1 5
9 8
3 9
7 9
9 1
6 9
4 6
2 3
NO
NO
YES

output:

? 5 2 4 5 7 8
? 2 1 3
? 8 1 2 3 4 5 7 8 9
! 9

result:

ok OK

Test #7:

score: 0
Accepted
time: 1ms
memory: 3468kb

input:

9
5 2
6 3
1 9
2 6
7 4
6 8
7 5
4 9
NO
YES
NO

output:

? 5 1 3 8 2 4
? 2 5 6
? 8 1 2 3 4 6 7 8 9
! 5

result:

ok OK

Test #8:

score: 0
Accepted
time: 1ms
memory: 3464kb

input:

9
7 9
7 8
4 2
5 6
9 1
2 8
3 5
4 5
NO
YES
YES

output:

? 5 1 3 6 2 4
? 2 5 7
? 8 1 2 3 4 6 7 8 9
! 7

result:

ok OK

Test #9:

score: -7
Wrong Answer
time: 1ms
memory: 3408kb

input:

9
3 2
8 9
8 5
5 2
4 6
9 1
6 7
3 6
NO
YES
YES

output:

? 5 1 4 7 2 3
? 2 5 6
? 8 1 2 3 4 6 7 8 9
! 6

result:

wrong output format Unexpected end of file - int32 expected

Subtask #2:

score: 0
Wrong Answer

Test #24:

score: 10
Accepted
time: 1ms
memory: 3468kb

input:

30
1 15
29 30
1 4
7 28
29 17
1 26
26 7
12 5
27 13
3 7
27 1
21 15
9 22
22 5
24 27
19 1
25 30
22 27
6 15
16 13
18 2
27 10
27 30
20 26
8 15
18 8
14 1
27 23
11 3
YES
NO
NO
YES
YES

output:

? 15 2 4 6 9 10 11 12 14 16 17 19 20 21 23 24
? 8 2 4 6 9 10 11 12 14
? 4 16 17 19 20
? 2 21 23
? 16 2 4 6 9 10 11 12 14 16 17 19 20 23 24 25 28
! 23

result:

ok OK

Test #25:

score: 0
Accepted
time: 0ms
memory: 3452kb

input:

30
15 16
8 6
19 2
26 17
30 15
26 4
1 6
1 23
15 1
29 25
21 3
12 1
2 24
29 22
9 1
3 10
27 28
5 12
20 5
14 7
5 26
7 18
10 23
1 28
3 11
7 1
19 23
13 23
29 30
YES
YES
NO
YES
YES

output:

? 15 4 8 9 11 13 14 16 17 18 20 21 22 24 25 27
? 8 4 8 9 11 13 14 16 17
? 4 4 8 9 11
? 2 13 14
? 14 4 8 9 11 14 16 17 18 20 21 22 24 25 27
! 14

result:

ok OK

Test #26:

score: -10
Wrong Answer
time: 1ms
memory: 3480kb

input:

30
19 7
14 27
22 18
15 19
1 18
27 23
21 28
19 24
25 10
27 3
23 7
9 26
20 4
7 9
12 19
6 19
23 17
18 5
5 8
21 25
10 30
9 1
5 29
2 7
12 10
11 6
4 10
26 13
5 16
NO
YES
YES
YES
YES

output:

? 15 2 3 8 11 13 14 15 16 17 20 22 24 28 29 30
? 8 1 4 5 6 7 9 10 12
? 4 1 4 5 6
? 2 1 4
? 29 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
! 4

result:

wrong output format Unexpected end of file - int32 expected

Subtask #3:

score: 0
Wrong Answer

Test #54:

score: 0
Wrong Answer
time: 4ms
memory: 3448kb

input:

500
419 133
44 225
391 269
419 461
293 347
108 31
110 363
423 257
321 155
498 87
180 492
251 5
357 30
341 172
275 109
372 446
286 336
208 339
162 320
138 103
129 219
62 141
359 286
130 238
470 460
418 48
210 358
429 13
323 143
382 415
406 394
309 175
325 170
128 108
6 113
363 17
470 457
7 224
288 48...

output:

? 250 2 3 7 8 10 11 12 13 15 16 19 24 26 28 29 33 34 36 37 38 39 40 41 42 43 45 46 47 50 53 54 55 57 58 64 65 67 68 69 70 71 72 73 74 75 76 77 78 79 80 82 83 85 86 88 95 96 99 100 109 110 112 114 117 119 121 122 123 124 126 129 134 135 138 140 144 148 149 150 152 153 154 155 158 164 165 167 168 169 ...

result:

wrong output format Unexpected end of file - int32 expected