#include "train.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> adj[5005], rev[5005];
vector<int> who_wins(vector<int> a, vector<int> r, vector<int> U, vector<int> V)
{
int n=a.size();
vector<int> cnt(n, 0), ok(n, 0), ans(n, 0);
for (int i=0; i<U.size(); i++)
{
adj[U[i]].push_back(V[i]);
rev[V[i]].push_back(U[i]);
}
queue<int> q;
for (int i=0; i<n; i++)
{
if (r[i])
{
ok[i]=1;
q.push(i);
}
}
while (!q.empty())
{
int u=q.front();
q.pop();
for (int v:rev[u])
{
if (ok[v])
continue;
if (a[v] || ++cnt[v]==adj[v].size())
{
ok[v]=1;
q.push(v);
}
}
}
for (int j=0; j<n; j++)
{
for (int i=0; i<n; i++)
{
cnt[i]=0;
if (!r[i])
continue;
ans[i]=1-a[i];
for (int v:adj[i])
if (a[i]^ok[v]^1)
ans[i]=a[i];
if (ans[i])
q.push(i);
}
while (!q.empty())
{
int u=q.front();
q.pop();
for (int v:rev[u])
{
if (ans[v])
continue;
if (a[v] || ++cnt[v]==adj[v].size())
{
ans[v]=1;
q.push(v);
}
}
}
if (j<n-1)
for (int i=0; i<n; i++)
ok[i]=ans[i], ans[i]=0;
}
return ans;
}
# | 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... |