제출 #137390

#제출 시각아이디문제언어결과실행 시간메모리
137390MAMBA장난감 기차 (IOI17_train)C++17
11 / 100
445 ms1720 KiB
#include "train.h"
#include <bits/stdc++.h>

using namespace std;

#define rep(i, j, k) for (int i = j; i < (int)k; i++)
#define pb push_back
#define all(x) x.begin(), x.end()

typedef vector<int> vi;

vi who_wins(vi a, vi r, vi u, vi v) {
  int n = a.size();
  int m = u.size();

  vector<vi> adj(n), radj(n);

  rep(i, 0, m) {
    adj[u[i]].pb(v[i]);
    radj[v[i]].pb(u[i]);
  }

  vector<bool> dead(n);

  int w = accumulate(all(r), 0);

  while (true) {
    fill(all(dead), 0);
    int L = 0, R = 0;
    vi q(n), cnt(n);
    rep(i, 0, n) if (r[i]) {
      dead[i] = true;
      q[R++] = i;
    }

    while (L < R) {
      int me = q[L++];
      for (auto e : radj[me]) {
        if (dead[e]) continue;
        cnt[e]++;
        if (a[e] || cnt[e] == adj[e].size()) {
          dead[e] = true;
          q[R++] = e;
        }
      }
    }

    L = R = 0;

    fill(all(cnt), 0);
    rep(i, 0, n) for (auto e : adj[i]) if (!dead[e]) cnt[i]++;

    rep(i, 0, n) if (cnt[i] && (!a[i] || cnt[i] == adj[i].size())) {
      dead[i] = false;
      q[R++] = i;
    }

    while (L < R) {
      int me = q[L++];
      for (auto e : radj[me]) {
        if (!dead[e]) continue;
        cnt[e]++;
        if (!a[e] || cnt[e] == adj[e].size()) {
          q[R++] = e;
          dead[e] = false;
        }
      }
    }

    rep(i, 0, n) if (!dead[i]) r[i] = 0;

    int w2 = accumulate(all(r), 0);
    if (w == w2) break;
    w = w2;
  }

  vi res(n);
  rep(i, 0, n) if (dead[i]) res[i] = 1;
  return res;
}

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

train.cpp: In function 'vi who_wins(vi, vi, vi, vi)':
train.cpp:41:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if (a[e] || cnt[e] == adj[e].size()) {
train.cpp:53:49: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     rep(i, 0, n) if (cnt[i] && (!a[i] || cnt[i] == adj[i].size())) {
train.cpp:63:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if (!a[e] || cnt[e] == adj[e].size()) {
#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...