QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#883873#9570. Binary TreexuemanCompile Error//C++233.5kb2025-02-05 19:33:592025-02-05 19:34:09

Judging History

This is the latest submission verdict.

  • [2025-02-05 19:34:09]
  • Judged
  • [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)
      |      ^~~~~