QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#883873 | #9570. Binary Tree | xueman | Compile Error | / | / | C++23 | 3.5kb | 2025-02-05 19:33:59 | 2025-02-05 19:34:09 |
Judging History
This is the latest submission verdict.
- [2025-02-05 19:34:09]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2025-02-05 19:33:59]
- Submitted
answer
#include <bits/stdc++.h>
using namespace std;
// #define endl '\n'
#define ll long long
const int N = 5e5 + 10;
const int maxn = 2e5 + 10;
const int inf = 0x3f3f3f3f;
struct edge
{
int to, ne;
} e[N];
int head[maxn], ecnt = 1;
void add(int x, int y)
{
e[++ecnt].to = y;
e[ecnt].ne = head[x];
head[x] = ecnt;
}
int n, sum;
int sz[maxn], vis[maxn];
int ans, pos;
void dfs1(int x, int fa, int mx)
{
sz[x] = 1;
int res = 0;
for (int i = head[x]; i; i = e[i].ne)
{
int y = e[i].to;
if (y == fa || vis[y])
continue;
dfs1(y, x, d1, d2, mx);
sz[x] += sz[y];
res = max(res, sz[y]);
}
res = max(res, mx - sz[x]);
if (res < ans || (ans == res && x < pos))
ans = res, pos = x;
}
void dfs2(int x, int fa, int d1, int d2)
{
sz[x] = 1;
for (int i = head[x]; i; i = e[i].ne)
{
int y = e[i].to;
if (y == fa || vis[y])
continue;
dfs2(y, x);
sz[x] += sz[y];
}
}
int ask(int x, int y)
{
cout << "? " << x << ' ' << y << endl;
int tmp;
cin >> tmp;
return tmp;
}
void solve(int now, int mx, int d1, int d2 = 0)
{
ans = inf, pos = 0;
dfs1(now, 0, mx);
// cout << '(' << pos << ')' << ans << endl;
// for (int i = 1; i <= n; i++)
// cout << sz[i] << ' ';
// cout << endl;
dfs2(pos, 0);
vector<pair<int, int>> v;
for (int i = head[pos]; i; i = e[i].ne)
{
int y = e[i].to;
if (y == d1 || y == d2)
continue;
v.push_back({sz[y], y});
}
sort(v.begin(), v.end(), greater<pair<int, int>>());
if (v.size() == 3)
{
int op = ask(v[0].second, v[1].second);
if (op == 0)
{
vis[pos] = 1;
solve(v[0].second, v[0].first);
}
else if (op == 1)
{
vis[v[0].second] = 1, vis[v[1].second] = 1;
solve(v[2].second, v[2].first + 1);
}
else
{
vis[pos] = 1;
solve(v[1].second, v[1].first);
}
}
else if (v.size() == 2)
{
int op = ask(v[0].second, v[1].second);
if (op == 0)
{
vis[pos] = 1;
solve(v[0].second, v[0].first);
}
else if (op == 1)
{
sum = pos;
return;
}
else
{
vis[pos] = 1;
solve(v[1].second, v[1].first);
}
}
else if (v.size() == 1)
{
int op = ask(pos, v[0].second);
if (op == 0)
{
sum = pos;
return;
}
else
{
sum = v[0].second;
return;
}
}
else
{
sum = pos;
return;
}
}
int main()
{
// ios::sync_with_stdio(0);
// cin.tie(0);
// cout.tie(0);
int T;
cin >> T;
while (T--)
{
cin >> n;
for (int i = 0; i <= n; i++)
head[i] = vis[i] = 0;
ecnt = 1;
for (int i = 1; i <= n; i++)
{
int x, y;
cin >> x >> y;
if (x)
add(x, i), add(i, x);
if (y)
add(y, i), add(i, y);
}
if (n == 1)
{
cout << "! 1" << endl;
continue;
}
sum = 0;
solve(1, n, 0);
cout << "! " << sum << endl;
}
}
詳細信息
answer.code: In function ‘void dfs1(int, int, int)’: answer.code:35:20: error: ‘d1’ was not declared in this scope; did you mean ‘y1’? 35 | dfs1(y, x, d1, d2, mx); | ^~ | y1 answer.code:35:24: error: ‘d2’ was not declared in this scope 35 | dfs1(y, x, d1, d2, mx); | ^~ answer.code: In function ‘void dfs2(int, int, int, int)’: answer.code:52:13: error: too few arguments to function ‘void dfs2(int, int, int, int)’ 52 | dfs2(y, x); | ~~~~^~~~~~ answer.code:44:6: note: declared here 44 | void dfs2(int x, int fa, int d1, int d2) | ^~~~ answer.code: In function ‘void solve(int, int, int, int)’: answer.code:73:9: error: too few arguments to function ‘void dfs2(int, int, int, int)’ 73 | dfs2(pos, 0); | ~~~~^~~~~~~~ answer.code:44:6: note: declared here 44 | void dfs2(int x, int fa, int d1, int d2) | ^~~~ answer.code:90:18: error: too few arguments to function ‘void solve(int, int, int, int)’ 90 | solve(v[0].second, v[0].first); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ answer.code:65:6: note: declared here 65 | void solve(int now, int mx, int d1, int d2 = 0) | ^~~~~ answer.code:95:18: error: too few arguments to function ‘void solve(int, int, int, int)’ 95 | solve(v[2].second, v[2].first + 1); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ answer.code:65:6: note: declared here 65 | void solve(int now, int mx, int d1, int d2 = 0) | ^~~~~ answer.code:100:18: error: too few arguments to function ‘void solve(int, int, int, int)’ 100 | solve(v[1].second, v[1].first); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ answer.code:65:6: note: declared here 65 | void solve(int now, int mx, int d1, int d2 = 0) | ^~~~~ answer.code:109:18: error: too few arguments to function ‘void solve(int, int, int, int)’ 109 | solve(v[0].second, v[0].first); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ answer.code:65:6: note: declared here 65 | void solve(int now, int mx, int d1, int d2 = 0) | ^~~~~ answer.code:119:18: error: too few arguments to function ‘void solve(int, int, int, int)’ 119 | solve(v[1].second, v[1].first); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ answer.code:65:6: note: declared here 65 | void solve(int now, int mx, int d1, int d2 = 0) | ^~~~~