Submission #73748

#TimeUsernameProblemLanguageResultExecution timeMemory
73748MKopchev장난감 기차 (IOI17_train)C++14
5 / 100
234 ms1728 KiB
#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; 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; 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...