제출 #1347181

#제출 시각아이디문제언어결과실행 시간메모리
1347181model_codeVoltage 2 (JOI26_voltage)C++20
100 / 100
30 ms928 KiB
#include "voltage.h"
#include <algorithm>
#include <queue>
#include <vector>

using namespace std;

bool solve(int N, int M) {
    queue<int> que;
    vector<int> rem(N);
    for (int i = 0; i < N; ++i) rem[i] = i;
    vector<int> used;

    auto indeg_0 = [&](int v) {
        vector<int> A(N, 1), B(N, 1);
        for (int i : used) A[i] = B[i] = 0;
        A[v] = 1; B[v] = 0;
        if (query(A, B) == 0) {
            que.push(v);
            rem.erase(find(rem.begin(), rem.end(), v));
        }
    };

    for (int i = 0; i < N; ++i) indeg_0(i);

    while (!que.empty()) {
        int v = que.front(); que.pop();
        vector<int> us;
        while (1) {
            {
                vector<int> A(N, 1), B(N, 1);
                for (int i : used) A[i] = B[i] = 0;
                for (int i : rem) A[i] = B[i] = 0;
                for (int i : us) A[i] = B[i] = 1;
                A[v] = 1; B[v] = 0;
                if (query(A, B) == 0) break;
            }
            int ok = 0, ng = rem.size() + 1;
            while (ng - ok > 1) {
                int mid = (ok + ng) / 2;
                vector<int> A(N, 1), B(N, 1);
                for (int i : used) A[i] = B[i] = 0;
                for (int i = ok; i < mid; ++i) A[rem[i]] = B[rem[i]] = 0;
                for (int i : us) A[i] = B[i] = 1;
                A[v] = 1; B[v] = 0;
                if (query(A, B) == 0) ok = mid;
                else ng = mid;
            }
            us.push_back(rem[ok]);
        }
        used.push_back(v);
        for (int u : us) {
            answer(v, u);
            indeg_0(u);
        }
    }
    return used.size() == N;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...