제출 #641883

#제출 시각아이디문제언어결과실행 시간메모리
641883piOOEToy Train (IOI17_train)C++17
100 / 100
533 ms1652 KiB
#include <bits/stdc++.h>
#include "train.h"

using namespace std;

constexpr int N = 5000;

vector<int> rev[N], g[N], a;
int n;

void bfs(vector<int> &used, int player) {
    vector<int> degree(n);
    queue<int> q;
    for (int i = 0; i < n; ++i) {
        if (used[i]) {
            q.push(i);
        }
    }

    while (!q.empty()) {
        int v = q.front();
        q.pop();
        for (int to: rev[v]) {
            if (!used[to] && (a[to] == player || ++degree[to] == g[to].size())) {
                used[to] = true;
                q.push(to);
            }
        }
    }
}

std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> A, std::vector<int> B) {
    ::a = a;
    n = a.size();
    for (int i = 0; i < A.size(); ++i) {
        g[A[i]].push_back(B[i]);
        rev[B[i]].push_back(A[i]);
    }
    bool found = true;
    while (found) {
        found = false;
        vector<int> used = r;
        bfs(used, 1);
        for (int &i: used) {
            i ^= 1;
        }
        bfs(used, 0);
        for (int i = 0; i < n; ++i) {
            if (r[i] == 1 && used[i]) {
                r[i] = 0;
                found = true;
            }
        }
    }
    vector<int> ans = r;
    bfs(ans, 1);
    return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

train.cpp: In function 'void bfs(std::vector<int>&, int)':
train.cpp:24:63: warning: comparison of integer expressions of different signedness: '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |             if (!used[to] && (a[to] == player || ++degree[to] == g[to].size())) {
      |                                                  ~~~~~~~~~~~~~^~~~~~~~~~~~~~~
train.cpp: In function 'std::vector<int> who_wins(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
train.cpp:35:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for (int i = 0; i < A.size(); ++i) {
      |                     ~~^~~~~~~~~~
#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...