QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#877085#8056. Travel 2FangYifanRE 0ms3456kbC++201.8kb2025-01-31 19:31:012025-01-31 19:31:07

Judging History

This is the latest submission verdict.

  • [2025-01-31 19:31:07]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 3456kb
  • [2025-01-31 19:31:01]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using db = double;
constexpr int mod = 998244353;

constexpr int N = 2510;
vector<int> edge[N];
int n, deg[N], cur[N], cnt[N], vis[N], instk[N], fa[N];
int query(int id) {
    cout << "> " << id << endl;
    int x; cin >> x >> deg[x];
    return x;
}
void dfs(int u, int son) {
    if (!vis[u]) n++;
    cnt[u]++;
    vis[u] = instk[u] = true;
    if (son) {
        for (int i = 0; i < (int)edge[u].size(); i++) {
            int v = edge[u][i];
            if (v == son) {
                query(i + 1);
                // cerr << "1 : " << u << " -> " << v << endl;
                dfs(v, -1);
            }
        }
    }
    for (int &i = cur[u]; i < deg[u]; ) {
        // cerr << u << ' ' << cur[u] << ' ' << deg[u] << "\n";
        int v = query(++i);
        edge[u].push_back(v);
        if (!instk[v]) fa[v] = u;
        // cerr << "2 : " << u << " -> " << v << ' ' << (v == fa[u] ? u : 0) << endl;
        dfs(v, v == fa[u] ? u : 0);
    }
    if (son == -1) {
        for (int i = 0; i < (int)edge[u].size(); i++) {
            int v = edge[u][i];
            if (v == fa[u]) query(i + 1);
        }
    }
    if (--cnt[u] == 0) instk[u] = false;
}
void solve() {
    n = 0;
    int root; cin >> root >> deg[1];
    dfs(1, 0);
    cout << "!";
    for (int i = 1; i <= n; i++) {
        for (auto j : edge[i]) {
            if (i < j) cout << ' ' << i << ' ' << j;
        }
    }
    cout << endl;
    string Correct; cin >> Correct;
    for (int i = 1; i <= n; i++) {
        deg[i] = cur[i] = cnt[i] = vis[i] = instk[i] = fa[i] = 0;
        edge[i].clear();
    }
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int tt = 1;
    cin >> tt;
    while (tt--) {
        solve();
    }
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3456kb

input:

2
1 1
2 1
1 1
2 1
1 1
Correct
1 3
2 2
1 3
2 2
4 2
1 3
3 1
1 3
3 1
1 3
4 2
2 2
4 2
2 2
1 3
Correct

output:

> 1
> 1
> 1
> 1
! 1 2
> 1
> 1
> 1
> 2
> 1
> 2
> 1
> 2
> 1
> 3
> 2
> 2
> 2
> 1
! 1 2 1 3 1 4 2 4

result:

ok correct! (2 test cases)

Test #2:

score: -100
Runtime Error

input:

1000
1 9
2 7
1 9
2 7
3 9
1 9
3 9
4 9
1 9
4 9
3 9
4 9
7 7
1 9
5 8
1 9
5 8
8 8
1 9
6 9
1 9
6 9
2 7
10 6
1 9
7 7
4 9
7 7
8 8
5 8
8 8
10 6
2 7
10 6
8 8
9 8
1 9
8 8
7 7
5 8
9 8
3 9
9 8
5 8
2 7
6 9
10 6
4 9
10 6
6 9
5 8
3 9
2 7
3 9
5 8
6 9
8 8
3 9
10 6
3 9
8 8
6 9
3 9
7 7
3 9
6 9
9 8
2 7
5 8
7 7
9 8
8 8
9...

output:

> 1
> 1
> 1
> 2
> 1
> 2
> 2
> 1
> 3
> 2
> 2
> 3
> 1
> 4
> 1
> 4
> 2
> 1
> 5
> 1
> 5
> 2
> 3
> 1
> 6
> 2
> 3
> 3
> 2
> 2
> 3
> 2
> 3
> 3
> 4
> 1
> 7
> 5
> 4
> 3
> 2
> 3
> 3
> 4
> 4
> 3
> 4
> 4
> 5
> 4
> 5
> 4
> 2
> 5
> 6
> 5
> 6
> 6
> 6
> 7
> 7
> 6
> 8
> 5
> 9
> 7
> 4
> 5
> 7
> 6
> 5
> 4
> 6
> 7
> 8
...

result: