#include "train.h"
#include <bits/stdc++.h>
using namespace std;
std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) {
int n = a.size();
int m = u.size();
int k = 0;
for (auto &&i : r)
{
k += i;
}
vector<int> nb_sortantes(n, 0);
for (auto &&i : u)
{
nb_sortantes[i]++;
}
vector<vector<int>> graphe_inv(n);
for (int i = 0; i < m; i++)
{
graphe_inv[v[i]].push_back(u[i]);
}
vector<int> avant(n, true);
for (int _ = 0; _ < k+42; _++)
{
vector<int> actuels(n, false);
vector<int> pile;
vector<int> s;
s = nb_sortantes;
for (int i = 0; i < n; i++)
{
if (r[i] && avant[i]) {
pile.push_back(i);
}
}
while(!pile.empty()) {
int c = pile.back();
pile.pop_back();
if (actuels[c] == 1) continue;
if (actuels[c] == 0 && r[c]) {
actuels[c] = -1;
}
else {
actuels[c] = true;
}
for (auto &&i : graphe_inv[c])
{
if (actuels[i] == 1) continue;
if (a[i]) pile.push_back(i);
else if (--s[i] == 0) pile.push_back(i);
}
}
for (auto &&i : actuels)
{
if (i == -1) i = 0;
}
avant = actuels;
}
return avant;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |