제출 #1322643

#제출 시각아이디문제언어결과실행 시간메모리
1322643JuanJL장난감 기차 (IOI17_train)C++20
0 / 100
920 ms1444 KiB
#include "train.h" #include <bits/stdc++.h> #define fst first #define snd second #define pb push_back #define SZ(x) (int)x.size() #define ALL(x) x.begin(),x.end() #define forn(i,a,b) for(int i = a; i<b;i++) #define mset(a,v) memset(a,v,sizeof(a)) using namespace std; typedef long long ll; const int MAXN = 5000+5; vector<ll> adj[MAXN]; ll lvl[MAXN]; bool vis[MAXN]; bool good[MAXN]; ll R[MAXN]; vector<pair<ll,ll>> pila; bool yes=true; void dfs(ll nd,ll ini,ll cnt){ if(vis[nd] && nd==ini && cnt==0){ yes=true; } if(vis[nd]) return; vis[nd]=true; for(auto i:adj[nd]) if(!R[i]){ dfs(i,ini,cnt); } } void ndfs(ll nd, ll p){ vis[nd]=true; if(good[nd]) yes=true; if(yes) return; for(auto i:adj[nd]) if(i!=p && !vis[i]){ ndfs(i,nd); if(yes) return; } } std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) { forn(i,0,SZ(u)){ adj[u[i]].pb(v[i]); } forn(i,0,SZ(r)){ R[i]=r[i]; } mset(good,-1); forn(i,0,SZ(r)) if(!r[i]){ mset(vis,false); yes=false; dfs(i,i,0); if(yes) good[i]=1; } vector<int> res(SZ(r),0); forn(i,0,SZ(r))if(!good[i]){ mset(vis,false); yes=false; ndfs(i,-1); if(yes) res[i]=0; else res[i]=1; } return res; }
#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...