이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "coprobber.h"
#include <bits/stdc++.h>
const int maxN = 500;
using namespace std;
#define forn(i, a, b)   for(int i=a; i<=b; ++i)
#define repn(i, a, b)   for(int i=a; i <b; ++i)
int cur;
int mov[maxN][maxN], deg[maxN][maxN];
int W[maxN][maxN][2];
int start(int N, bool A[maxN][maxN]) {
    queue < tuple < int, int, int > > q;
    repn(i, 0, N) repn(j, 0, N) repn(k, 0, N) deg[i][j] += A[j][k];
    repn(i, 0, N) forn(turn, 0, 1) {
        W[i][i][turn] = 1;
        q.push({i, i, turn});
    }
    while (q.size()) {
        int c, r, t;
        tie(c, r, t) = q.front();
        q.pop();
        repn(i, 0, N) {
            if (t) {
                if ( (A[c][i] || i == c) && !W[i][r][0]) {
                    mov[i][r] = c;
                    W[i][r][0] = true;
                    q.push({i, r, 0});
                }
                continue;
            }
            if (A[r][i] && !W[c][i][1] && --deg[c][i] < 1) {
                W[c][i][1] = true;
                q.push({c, i, 1});
            }
        }
    }
    bool ok = true;
    repn(i, 0, N) ok &= W[0][i][0];
    return (ok ? 0 : -1);
}
int nextMove(int R) {
    return cur = mov[cur][R];
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |