제출 #641665

#제출 시각아이디문제언어결과실행 시간메모리
641665piOOEToy Train (IOI17_train)C++17
5 / 100
2094 ms1704 KiB
#include <bits/stdc++.h> #include "train.h" using namespace std; using ll = long long; std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> A, std::vector<int> B) { int n = a.size(), m = A.size(); vector<vector<int>> g(n); for (int i = 0; i < m; ++i) { g[A[i]].push_back(B[i]); } vector<int> ans(n); for (int root = 0; root < n; ++root) { vector<bool> dp(n), used(n); vector<int> stk, last = {-1}; vector<int> in_stk(n, -1); function<void(int)> dfs = [&](int v) { used[v] = true; in_stk[v] = stk.size(); stk.push_back(v); if (r[v]) { last.push_back(last.size() - 1); } else { last.push_back(last.back()); } for (int to: g[v]) { if (in_stk[to] != -1) { if (a[v] ^ (last.back() < in_stk[to])) { dp[v] = true; } } else { if (!used[to]) { dfs(to); } if (a[v] ^ a[to] ^ dp[to]) { dp[v] = true; } } } stk.pop_back(); last.pop_back(); in_stk[v] = -1; }; dfs(root); ans[root] = dp[root] ^ a[root] ^ 1; } return ans; }
#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...