Submission #660994

#TimeUsernameProblemLanguageResultExecution timeMemory
660994uroskToy Train (IOI17_train)C++14
22 / 100
1641 ms1420 KiB
#include "train.h" #define dbg(x) cerr<<#x<<": "<<x<<endl #define here cerr<<"===================================\n" #include <bits/stdc++.h> #define ll int #define sz(a) (ll)(a.size()) #define pb push_back #define popb pop_back #define all(a) a.begin(),a.end() #define llinf 1000000000LL #define fi first #define sc second #define pll pair<ll,ll> #define endl '\n' #define ceri(a,l,r) {cerr<<#a<<": ";for(ll i_ = l;i_<=r;i_++) cerr<<a[i_]<< " ";cerr<<endl;} using namespace std; #define maxn 5005 ll n,m,it; vector<ll> ans; vector<ll> g[maxn]; vector<ll> cur; ll b[maxn]; bool c[maxn]; bool vis[maxn]; bool naso = 0; bool ok[maxn]; ll cnt = 0; ll in[maxn],out[maxn]; void dfs(ll u,ll poc){ vis[u] = 1; for(ll s : g[u]){ if(c[s]) continue; if(s==poc){ naso = 1; return; } if(vis[s]) continue; dfs(s,poc); if(naso) return; } } void dfs2(ll u,ll poc){ if(c[u]) cnt++; vis[u] = 1; for(ll s : g[u]){ if((s==poc)&&(cnt>0)){ naso = 1; return; } if(vis[s]) continue; dfs2(s,poc); if(naso) return; } if(c[u]) cnt--; } void dfs3(ll u){ vis[u] = 1; for(ll s : g[u]){ if(vis[s]) continue; dfs3(s); ok[u]|=ok[s]; } } bool dfs4(ll u){ bool tu = 0; for(ll s : g[u]) if(s==u) tu = 1; if(!tu){ if(sz(g[u])==0) return 1; return dfs4(g[u][0]); } if(!b[u]&&!c[u]) return 0; if(b[u]&&c[u]) return 1; for(ll s : g[u]){ if(s!=u) return dfs4(s); } return 1; } vector<int> who_wins(vector<int> a,vector<int> r,vector<int> u,vector<int> v) { reverse(all(u)); u.pb(-1); reverse(all(u)); reverse(all(v)); v.pb(-1); reverse(all(v)); reverse(all(r)); r.pb(-1); reverse(all(r)); ll sum = 0; for(ll x : a) sum+=x; n = sz(a); reverse(all(a)); a.pb(-1); reverse(all(a)); for(ll i = 1;i<=n;i++) b[i] = a[i]; m = sz(u)-1; bool sub1 = 1; for(ll i = 1;i<=n;i++) c[i] = r[i]; for(ll i = 1;i<=m;i++){ u[i]++; v[i]++; ll x = u[i]; ll y = v[i]; g[x].pb(y); sub1&=((x==y)||(y-x==1)); } if(sum==0){ for(ll i = 1;i<=n;i++){ if(c[i]) continue; for(ll j = 1;j<=n;j++) vis[j] = 0; naso = 0; dfs(i,i); if(naso) ok[i] = 1; } for(ll i = 1;i<=n;i++){ for(ll j = 1;j<=n;j++) vis[j] = 0; dfs3(i); } for(ll i = 1;i<=n;i++) ans.pb(1^ok[i]); return ans; } if(sum==n){ for(ll i = 1;i<=n;i++){ for(ll j = 1;j<=n;j++) vis[j] = 0; naso = 0; cnt = 0; dfs2(i,i); if(naso) ok[i] = 1; } for(ll i = 1;i<=n;i++){ for(ll j = 1;j<=n;j++) vis[j] = 0; dfs3(i); } for(ll i = 1;i<=n;i++) ans.pb(ok[i]); return ans; } if(sub1){ for(ll i = 1;i<=n;i++){ for(ll j = 1;j<=n;j++) vis[j] = 0; ok[i] = dfs4(i); } for(ll i = 1;i<=n;i++) ans.pb(ok[i]); return ans; } return {}; } /* 4 6 0 0 0 0 0 1 0 0 0 1 0 2 0 3 1 2 1 3 2 3 */
#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...