Submission #788400

#TimeUsernameProblemLanguageResultExecution timeMemory
788400NeroZeinToy Train (IOI17_train)C++17
0 / 100
127 ms262144 KiB
#include "train.h" #include "bits/stdc++.h" using namespace std; std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> U, std::vector<int> V) { int n = (int) a.size(); int m = (int) U.size(); vector<vector<int>> g(n); vector<vector<int>> rg(n); for (int i = 0; i < m; ++i) { g[U[i]].push_back(V[i]); rg[V[i]].push_back(U[i]); } vector<int> stk; vector<int> vis(n); function<void(int)> dfs = [&](int v) { for (int u : g[v]) { if (!vis[u]) { dfs(u); } } stk.push_back(v); }; dfs(0); int ncc = 0; function<void(int)> dfs2 = [&](int v) { vis[v] = ncc; for (int u : rg[v]) { if (vis[u] == -1) { dfs2(u); } } }; fill(vis.begin(), vis.end(), -1); for (int i = n - 1; i >= 0; --i) { if (vis[i] == -1) { dfs2(i); ncc++; } } vector<bool> win(ncc); for (int i = 0; i < n; ++i) { if (r[i]) { win[vis[i]] = true; } } for (int i = n - 1; i >= 0; --i) { for (int u : rg[i]) { assert(vis[u] != -1 && vis[u] <= vis[i]); win[vis[i]] = win[vis[i]] | win[vis[u]]; } } vector<int> res(n); for (int i = 0; i < n; ++i) { res[i] = win[vis[i]]; } 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...