QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#72452 | #4926. Where Is the Root? | xinchengo | 0 | 0ms | 0kb | C++14 | 1006b | 2023-01-15 16:19:33 | 2023-01-15 16:19:35 |
Judging History
answer
#include<iostream>
#include<algorithm>
#include<numeric>
using namespace std;
enum limits
{
maxn = 500
};
int n, deg[maxn + 7], p[maxn + 7];
char s[14];
bool check(int);
int main()
{
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n;
for(int i=1, u, v; i<=n; i++)
cin >> u >> v, deg[u]++, deg[v]++;
iota(p+1, p+n+1, 1);
sort(p+1, p+n+1, [](int a, int b) { return deg[a] < deg[b]; } );
int l = 1, r = n;
while(r - l + 1 > 2 || (r == l + 1 && deg[p[r]] != 1))
{
int m = (l + r) >> 1;
if(check(m))
r = m;
else
l = m + 1;
}
if(r - l + 1 == 2)
{
cout << "? " << p[l] << ' ' << (l == 1 ? p[3] : p[l - 1]) << endl, cin >> s;
l = r = (s[0] == 'Y' ? l : r);
}
cout << "! " << p[l] << endl;
}
bool check(int x)
{
cout << "? ";
for(int i=1; i<=x; i++)
cout << p[i] << ' ';
cout << endl, cin >> s;
return s[0] == 'Y';
}
详细
Subtask #1:
score: 0
Time Limit Exceeded
Test #1:
score: 0
Time Limit Exceeded
input:
7 4 1 1 2 4 3 3 5 3 6 4 7
output:
result:
Subtask #2:
score: 0
Time Limit Exceeded
Test #24:
score: 0
Time Limit Exceeded
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
output:
result:
Subtask #3:
score: 0
Time Limit Exceeded
Test #54:
score: 0
Time Limit Exceeded
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...