Submission #766729

#TimeUsernameProblemLanguageResultExecution timeMemory
766729SanguineChameleonToy Train (IOI17_train)C++17
22 / 100
753 ms1424 KiB
#include "train.h" #include <bits/stdc++.h> using namespace std; const int maxn = 5e3 + 20; vector<int> adj[maxn]; bool charge[maxn]; bool good[maxn]; bool flag[maxn]; int own[maxn]; int n, m; int root; bool dfs1(int u) { flag[u] = true; for (auto v: adj[u]) { if (v == root) { return true; } else if (!flag[v] && dfs1(v)) { return true; } } return false; } bool dfs2(int u) { flag[u] = true; if (good[u]) { return true; } for (auto v: adj[u]) { if (!flag[v] && dfs2(v)) { return true; } } return false; } bool dfs3(int u) { flag[u] = true; for (auto v: adj[u]) { if (charge[v]) { continue; } if (v == root) { return true; } else if (!flag[v] && dfs3(v)) { return true; } } return false; } vector<int> sub3() { for (root = 0; root < n; root++) { if (!charge[root]) { continue; } for (int u = 0; u < n; u++) { flag[u] = false; } good[root] = dfs1(root); } vector<int> res(n); for (root = 0; root < n; root++) { for (int u = 0; u < n; u++) { flag[u] = false; } res[root] = dfs2(root); } return res; } vector<int> sub4() { for (root = 0; root < n; root++) { if (charge[root]) { continue; } for (int u = 0; u < n; u++) { flag[u] = false; } good[root] = dfs3(root); } vector<int> res(n); for (root = 0; root < n; root++) { for (int u = 0; u < n; u++) { flag[u] = false; } res[root] = dfs2(root) ^ 1; } return res; } vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) { n = a.size(); for (int i = 0; i < n; i++) { own[i] = a[i]; charge[i] = r[i]; } m = u.size(); for (int i = 0; i < m; i++) { adj[u[i]].push_back(v[i]); } bool is_sub3 = true; bool is_sub4 = true; for (int i = 0; i < n; i++) { is_sub3 &= (own[i] == 1); is_sub4 &= (own[i] == 0); } if (is_sub3) { return sub3(); } if (is_sub4) { return sub4(); } return vector<int>(); }
#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...