This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
const int nmax=5e3+42;
int n;
vector< int > adj[nmax];
vector<int> ret;
bool rech[nmax];
bool been[nmax][2];
void dfs(int node,bool good)
{
if(rech[node])good=1;
if(been[node][good])return;
been[node][good]=1;
for(auto k:adj[node])
dfs(k,good);
}
int go[16];
vector<int> a_;
bool is[16];
bool can(int where)
{
if(go[where]!=-1)
{
memset(is,0,sizeof(is));
while(is[where]==0)
{
is[where]=1;
where=go[where];
}
for(int i=0;i<n;i++)
if(is[i]&&rech[i])return 1;
return 0;
}
int player=a_[where];
if(player==0)
{
for(auto k:adj[where])
{
go[where]=k;
bool result=can(k);
go[where]=-1;
if(result==0)return 0;
}
return 1;
}
else
{
for(auto k:adj[where])
{
go[where]=k;
bool result=can(k);
go[where]=-1;
if(result==1)return 1;
}
return 0;
}
}
vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v)
{
a_=a;
bool c1=1;
int m=u.size();
for(int i=0; i<m; i++)
{
adj[u[i]].push_back(v[i]);
if(v[i]-u[i]>1||v[i]-u[i]<0)c1=0;
}
n=a.size();
for(int i=0; i<n; i++)
rech[i]=r[i];
bool one=1;
for(auto k:a)
if(k!=1)one=0;
//one=0;
if(one)
{
for(int i=0; i<n; i++)
{
memset(been,0,sizeof(been));
//dfs(i,0,0);
been[i][0]=1;
for(auto k:adj[i])
dfs(k,rech[i]);
ret.push_back(been[i][1]);
}
}
else if(c1)
{
for(int i=0; i<n; i++)
{
int where=i;
while(1)
{
bool self=0;
for(auto k:adj[where])
if(k==where)self=1;
if(self==0)where++;
else if(a[where]==r[where])
{
ret.push_back(a[where]);
break;
}
else if(adj[where].size()==2)where++;
else
{
ret.push_back(!a[where]);
break;
}
}
}
}
else if(n<=15)
{
for(int i=0;i<n;i++)
{
memset(go,-1,sizeof(go));
ret.push_back(can(i));
}
}
return ret;
}
/*
int main()
{
//for(auto k:who_wins({0, 1}, {1, 0}, {0, 0, 1, 1}, {0, 1, 0, 1}))cout<<k<<endl;
//for(auto k:who_wins({1, 1,1}, {0,0,1}, {0, 1,2}, {1,2,0}))cout<<k<<endl;
//for(auto k:who_wins({1,1,1,1,1}, {0,0,1,0,0}, {0,1,2,3,4}, {1,2,0,4,3}))cout<<k<<endl;
//for(auto k:who_wins({1,1,1}, {1,0,0}, {0,1,2}, {1,2,2}))cout<<k<<endl;
//for(auto k:who_wins({1},{1},{0},{0}))cout<<k<<endl;
for(auto k:who_wins({1,0},{1,1},{0,1},{1,0}))cout<<k<<endl;
}
*/
# | 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... |