QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#706152#9484. Colored Complete GraphBalintR#WA 1ms4008kbC++202.3kb2024-11-03 07:48:462024-11-03 07:48:47

Judging History

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

  • [2024-11-03 07:48:47]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:4008kb
  • [2024-11-03 07:48:46]
  • 提交

answer

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

typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<pii> vpii;
#define pb push_back
#define fs first
#define sn second
#define ms(a, x) memset(a, x, sizeof(a))
#define SZ(v) ((int) (v).size())
#define ALL(v) begin(v), end(v)
const int INF = 0x3f3f3f3f;
#define FR(i, n) for(int i = 0; i < (n); i++)
#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define FORR(i, a, b) for(int i = (a); i >= (b); i--)
#define dbg(x){cerr << #x << ' ' << (x) << endl;}
#define dbgArr(arr, n){cerr << #arr; FR(_i, n) cerr << ' ' << (arr)[_i]; cerr << endl;}
template <class T, class U>
ostream& operator<<(ostream &os, pair<T, U> p){return os << "(" << p.fs << ", " << p.sn << ")";}

const int MN = 5e4 + 5;
int n;
int dsu[2][MN];
vi roots[2];
vpii edges[2];

int find(int s, int a){
    return dsu[s][a] < 0 ? a : dsu[s][a] = find(s, dsu[s][a]);
}

void merge(int s, int a, int b){
    a = find(s, a), b = find(s, b);
    assert(a != b);
    dsu[s][a] += dsu[s][b];
    dsu[s][b] = a;
}

bool query(int a, int b){
    cout << a+1 << ' ' << b+1 << endl;
    char res; cin >> res;
    assert(res != 'F');
    return res == 'R';
}

int main(){
    cin.sync_with_stdio(0); cin.tie(0);
    cin >> n;
    ms(dsu, -1);
    roots[0].pb(0);
    roots[1].pb(0);

    FOR(n1, 1, n){
        assert(SZ(roots[0]) == 1 || SZ(roots[1]) == 1);

        bool s = 0;
        if(SZ(roots[0]) == 1) s = 1;
        assert(SZ(roots[!s]) == 1);

        while(!roots[s].empty()){
            int n2 = roots[s].back();
            if(query(n1, n2) == s){
                edges[s].pb({n1, n2});
                merge(s, n1, n2);
                roots[s].pop_back();
            }
            else {
                edges[!s].pb({n1, n2});
                merge(!s, n1, n2);
                roots[!s].pop_back();
                break;
            }
        }
        roots[0].pb(n1);
        roots[1].pb(n1);
    }

    bool s = 0;
    if(SZ(roots[0]) != 1) s = 1;
    assert(SZ(roots[s]) == 1);
    assert(SZ(edges[s]) == n-1);
    assert(dsu[s][roots[s][0]] == -n);

    cout << "!\n";
    for(auto [a, b] : edges[s]){
        cout << b+1 << ' ' << a+1 << '\n';
    }
    cout << flush;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 4008kb

input:

3

output:

2 1

result:

wrong answer invalid question