제출 #838435

#제출 시각아이디문제언어결과실행 시간메모리
838435thimote75장난감 기차 (IOI17_train)C++14
0 / 100
86 ms1392 KiB
#include "train.h" #include <bits/stdc++.h> using namespace std; using idata = vector<int>; using bdata = vector<bool>; using igrid = vector<idata>; idata controller, charger; int N, M; igrid roads; idata visited; int stage = 1; bdata status; bool dfs (int msk) { int node = msk >> 1; int type = msk & 1; if (visited[msk] >= stage) return status[msk]; visited[msk] = stage; if (charger[node] == 1 && type == 0 && dfs(msk + 1)) { status[msk] = true; visited[msk] = stage + 1; return true; } if (type == 1 && visited[msk - 1] == stage) { status[msk] = true; visited[msk] = stage + 1; return true; } status[msk] = false; for (int next : roads[node]) { int nxt_msk = next * 2 + type; if (dfs(nxt_msk)) { status[msk] = true; visited[msk] = stage + 1; return true; } } visited[msk] = stage + 1; return status[msk]; } idata who_wins(idata _controller, idata _charger, idata u, idata v) { N = _controller.size(); M = u.size(); controller = _controller; charger = _charger; roads.resize(N); for (int i = 0; i < M; i ++) roads[u[i]].push_back(v[i]); visited.resize(2 * N); status .resize(2 * N); idata answer(N, false); for (int i = 0; i < N; i ++) { answer[i] = dfs(2 * i); stage += 2; } return answer; }
#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...