이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 ans=0,been[nmax];
void dfs(int node)
{
if(been[node])return;
if(rech[node])ans=1;
been[node]=1;
for(auto k:adj[node])
dfs(k);
}
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;
if(can(k)==0)return 0;
go[where]=-1;
}
return 1;
}
else
{
for(auto k:adj[where])
{
go[where]=k;
if(can(k)==1)return 1;
go[where]=-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;
if(one)
{
for(int i=0; i<n; i++)
{
memset(been,0,sizeof(been));
ans=0;
dfs(i);
ret.push_back(ans);
}
}
if(c1)
{
ret= {};
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;
}
*/
# | 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... |