#include <bits/stdc++.h>
#include "train.h"
using namespace std;
#define pb push_back
#define st first
#define nd second
typedef long long ll;
typedef long double ld;
const ll I = 1000'000'000'000'000'000LL;
const int II = 2'000'000'000;
const ll M = 1000'000'007LL;
const int N = 20'007;
bool win[N];
bool clr[N], own[N], rm[N];
vector<int> ed[N], red[N];
vector<int> cur;
bool vis[N];
int il[N];
vector<pair<int, int>> e;
void Find(int r)
{
int v;
queue<int> q;
for(int i = 0; i < (int)cur.size(); ++i)
{
v = cur[i];
if(vis[v]) q.push(v);
il[v] = ed[v].size();
}
while((int)q.size() > 0)
{
v = q.front(); q.pop();
for(int i = 0; i < (int)red[v].size(); ++i)
{
if(vis[red[v][i]]) continue;
--il[red[v][i]];
if((own[red[v][i]] == r) || il[red[v][i]] == 0)
{
vis[red[v][i]] = 1;
q.push(red[v][i]);
}
}
}
}
vector<int> who_wins(vector<int> a, vector<int> r, vector<int> _u, vector<int> _v)
{
int n = a.size(), m = _u.size();
for(int i = 0; i < n; ++i)
{
clr[i] = r[i];
own[i] = a[i];
cur.pb(i);
}
for(int i = 0; i < m; ++i)
e.pb(make_pair(_u[i], _v[i]));
while(cur.size() > 0)
{
for(int i = 0; i < (int)e.size(); ++i)
if(rm[e[i].st] || rm[e[i].nd])
{
swap(e[i], e.back());
e.pop_back();
--i;
}
for(int i = 0; i < (int)e.size(); ++i)
{ed[e[i].st].pb(e[i].nd); red[e[i].nd].pb(e[i].st);}
for(int i = 0; i < (int)cur.size(); ++i)
if(clr[cur[i]])
vis[cur[i]] = 1;
Find(1);
bool xd = 1;
for(int i = 0; i < (int)cur.size(); ++i)
if(!vis[cur[i]]) xd = 0;
if(xd)
{
for(int i = 0; i < (int)cur.size(); ++i)
win[cur[i]] = 1;
break;
}
for(int i = 0; i < (int)cur.size(); ++i)
vis[cur[i]] ^= 1;
Find(0);
for(int i = 0; i < (int)cur.size(); ++i)
{
int v = cur[i];
int xd = vis[v];
vis[v] = 0; il[v] = 0;
ed[v].clear();
red[v].clear();
if(xd)
{
rm[v] = 1;
swap(cur[i], cur.back());
cur.pop_back();
}
}
}
vector<int> answer;
for(int i = 0; i < n; ++i)
answer.pb(win[i]);
cur.clear();
for(int i = 0; i < n; ++i)
{
ed[i].clear(); red[i].clear(); vis[i] = 0;
rm[i] = 0; win[i] = 0;
}
e.clear();
return answer;
}
# | 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... |