// #include "train.h"
#include <bits/stdc++.h>
using namespace std;
const int mxN = 5005;
const int mxM = 2200005;
const int mxK = 61;
const int MOD = 1e9 + 7;
int N, M;
vector<int> adj[mxN];
vector<int> radj[mxN];
int AB[mxN];
bool imp[mxN];
int cnt;
void init(vector<int> a, vector<int> r, vector<int> u, vector<int> v)
{
N = a.size(), M = u.size();
for (int i = 0; i < N; i++)
AB[i] = a[i];
for (int i = 0; i < N; i++)
imp[i] = r[i];
for (int i = 0; i < M; i++)
{
int t1 = u[i], t2 = v[i];
adj[t1].push_back(t2);
radj[t2].push_back(t1);
}
}
bool Chk[mxN];
bool bor[mxN];
int deg[mxN];
queue<int> que;
void solve_reachable()
{
for (int i = 0; i < N; i++)
deg[i] = adj[i].size(), Chk[i] = false;
for (int i = 0; i < N; i++)
if (imp[i])
que.push(i), Chk[i] = true;
while (que.size())
{
int now = que.front();
que.pop();
for (int x : radj[now])
if (!Chk[x])
{
if (AB[x] == 1)
{
Chk[x] = true;
que.push(x);
}
else
{
deg[x]--;
if (deg[x] == 0)
{
Chk[x] = true;
que.push(x);
}
}
}
}
for (int i = 0; i < N; i++)
bor[i] = (!Chk[i]);
}
void destroy_charge()
{
for (int i = 0; i < N; i++)
deg[i] = adj[i].size(), Chk[i] = false;
for (int i = 0; i < N; i++)
if (bor[i])
que.push(i), Chk[i] = true;
while (que.size())
{
int now = que.front();
que.pop();
for (int x : radj[now])
if (!Chk[x])
{
if (AB[x] == 0)
{
Chk[x] = true;
que.push(x);
}
else
{
deg[x]--;
if (deg[x] == 0)
{
Chk[x] = true;
que.push(x);
}
}
}
}
for (int i = 0; i < N; i++)
if (Chk[i])
imp[i] = false;
}
void solve()
{
int pcnt = 0;
for (int i = 0; i < N; i++)
if (imp[i])
pcnt++;
while (true)
{
solve_reachable();
destroy_charge();
int ncnt = 0;
for (int i = 0; i < N; i++)
if (imp[i])
ncnt++;
if (pcnt == ncnt)
break;
pcnt = ncnt;
}
}
vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v)
{
init(a, r, u, v);
solve();
vector<int> res(N);
for (int i = 0; i < N; i++)
res[i] = (bor[i] ? 0 : 1);
return res;
}
# | 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... |