제출 #134142

#제출 시각아이디문제언어결과실행 시간메모리
134142IOrtroiiiToy Train (IOI17_train)C++14
100 / 100
688 ms1528 KiB
#include <bits/stdc++.h>

#include "train.h"

using namespace std;

vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) {
   int n = a.size();
   int m = u.size();
   vector<int> deg(n);
   vector<vector<int>> g(n);
   for (int i = 0; i < m; ++i) {
      ++deg[u[i]];
      g[v[i]].push_back(u[i]);
   }
   while (true) {
      vector<int> ans = r;
      {
         queue<int> q;
         vector<int> cdeg = deg;
         for (int i = 0; i < n; ++i) {
            if (ans[i]) {
               q.push(i);
            }
         }
         while (!q.empty()) {
            int u = q.front(); q.pop();
            for (int v : g[u]) {
               if (!ans[v]) {
                  if (a[v] || (--cdeg[v]) == 0) {
                     ans[v] = 1;
                     q.push(v);
                  }
               }
            }
         }
      }
      {
         queue<int> q;
         vector<int> cdeg = deg;
         for (int i = 0; i < n; ++i) {
            if (!ans[i]) {
               q.push(i);
            }
         }
         while (!q.empty()) {
            int u = q.front(); q.pop();
            for (int v : g[u]) {
               if (ans[v]) {
                  if (!a[v] || (--cdeg[v]) == 0) {
                     ans[v] = 0;
                     q.push(v);
                  }
               }
            }
         }
      }
      bool finish = true;
      for (int i = 0; i < n; ++i) {
         if (!ans[i] && r[i]) {
            r[i] = 0;
            finish = false;
         }
      }
      if (finish) {
         return ans;
      }
   }
}
#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...