Submission #1143959

#TimeUsernameProblemLanguageResultExecution timeMemory
1143959gygToy Train (IOI17_train)C++20
11 / 100
290 ms1864 KiB
#include "train.h" #include <bits/stdc++.h> using namespace std; #define sig signed #define int long long #define arr array #define vec vector const int N = 5e3 + 5; int n, m; arr<bool, N> a, ch; arr<vec<int>, N> out, in; arr<bool, N> cyc_vs; bool cyc_dfs(int u, int src) { cyc_vs[u] = true; for (int v : out[u]) { if (v == src) return true; if (cyc_vs[v]) continue; if (cyc_dfs(v, src)) return true; } return false; } arr<bool, N> cyc; arr<bool, N> wn; void wn_dfs(int u) { wn[u] = true; for (int v : in[u]) if (!wn[v]) wn_dfs(v); } vec<sig> who_wins(vec<sig> _a, vec<sig> _ch, vec<sig> _u, vec<sig> _v) { n = _a.size(), m = _u.size(); for (int u = 1; u <= n; u++) a[u] = _a[u - 1], ch[u] = _ch[u - 1]; for (int i = 1; i <= m; i++) { int u = _u[i - 1] + 1, v = _v[i - 1] + 1; out[u].push_back(v), in[v].push_back(u); } for (int u = 1; u <= n; u++) { if (!ch[u]) continue; cyc_vs.fill(false); cyc[u] = cyc_dfs(u, u); } for (int u = 1; u <= n; u++) if (cyc[u] && !wn[u]) wn_dfs(u); vec<sig> ans; for (int u = 1; u <= n; u++) { if (!wn[u]) ans.push_back(0); else ans.push_back(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...