Submission #1037633

#TimeUsernameProblemLanguageResultExecution timeMemory
1037633thinknoexitToy Train (IOI17_train)C++17
Compilation error
0 ms0 KiB
#include "train.h" #include <bits/stdc++.h> using namespace std; using ll = long long; namespace Arezou { const int N = 5050; vector<int> adj[N], rev[N]; bool ans[N], vis1[N], vis2[N]; int n, m; void dfs1(int v) { for (auto& x : adj[v]) { if (!vis1[x]) vis1[x] = 1, dfs1(x); } } void dfs2(int v) { for (auto& x : rev[v]) { if (!vis2[x]) vis2[x] = 1, dfs2(x); } } vector<int> who_wins(vector<int> a, vector<int> r, vector<int> _U, vector<int> _V) { n = a.size(); m = _U.size(); for (int i = 0;i < m;i++) { adj[_U[i]].push_back(_V[i]); rev[_V[i]].push_back(_U[i]); } for (int i = 0;i < n;i++) { if (!r[i]) continue; memset(vis1, 0, sizeof vis1); memset(vis2, 0, sizeof vis2); dfs1(i); dfs2(i); bool ch = 0; for (int j = 0;j < n;j++) if (vis1[j] && vis2[j]) ch = 1; if (ch) { for (int j = 0;j < n;j++) if (vis2[j]) ans[j] = 1; } } vector<int> _ans(n); for (int i = 0;i < n;i++) _ans[i] = ans[i]; return _ans; } }; namespace Borzou { const int N = 5050; vector<int> adj[N], rev[N]; bool ans[N], vis1[N], vis2[N]; int n, m, r[N]; void dfs1(int v) { for (auto& x : adj[v]) { if (!r[x] && !vis1[x]) vis1[x] = 1, dfs1(x); } } void dfs2(int v) { for (auto& x : rev[v]) { if (!r[x] && !vis2[x]) vis2[x] = 1, dfs2(x); } } vector<int> who_wins(vector<int> a, vector<int> r, vector<int> _U, vector<int> _V) { n = a.size(); m = _U.size(); for (int i = 0;i < m;i++) { adj[_U[i]].push_back(_V[i]); rev[_V[i]].push_back(_U[i]); } for (int i = 0;i < n;i++) ::r[i] = r[i], ans[i] = 1; for (int i = 0;i < n;i++) { if (r[i]) continue; memset(vis1, 0, sizeof vis1); memset(vis2, 0, sizeof vis2); dfs1(i); dfs2(i); for (int j = 0;j < n;j++) if (vis1[j] && vis2[j]) ans[j] = 0; } for (int i = 0;i < n;i++) { for (int j = 0;j < n;j++) { for (auto& x : adj[j]) { if (!ans[x]) ans[j] = 0; } } } vector<int> _ans(n); for (int i = 0;i < n;i++) _ans[i] = ans[i]; return _ans; } }; namespace Linear { const int N = 5050; vector<int> adj[N]; int n, m; vector<int> who_wins(vector<int> a, vector<int> r, vector<int> _U, vector<int> _V) { n = a.size(); m = _U.size(); for (int i = 0;i < m;i++) { adj[_U[i]].push_back(_V[i]); } vector<int> ans(n); ans[n - 1] = r[n - 1]; for (int i = n - 2;i >= 0;i--) { if (a[i] == 0) { // Borzou bool ch = 0; for (auto& x : adj[i]) { if (x == i && !r[i]) ch = 1; else if (x != i && !ans[x]) ch = 1; } ans[i] = ch ^ 1; } else { // Arezou bool ch = 0; for (auto& x : adj[i]) { if (x == i && r[i]) ch = 1; else if (x != i && ans[x]) ch = 1; } ans[i] = ch; } } return ans; } }; vector<int> who_wins(vector<int> a, vector<int> r, vector<int> _U, vector<int> _V) { bool ch = 1; for (auto& x : a) ch &= x == 0; if (ch) return Borzou::who_wins(a, r, _U, _V); ch = 1; for (auto& x : a) ch &= x == 1; if (ch) return Arezou::who_wins(a, r, _U, _V); return Linear::who_wins(a, r, _U, _V); }

Compilation message (stderr)

train.cpp: In function 'std::vector<int> Borzou::who_wins(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
train.cpp:66:31: error: '::r' has not been declared; did you mean 'Borzou::r'?
   66 |   for (int i = 0;i < n;i++) ::r[i] = r[i], ans[i] = 1;
      |                               ^
      |                               Borzou::r
train.cpp:48:12: note: 'Borzou::r' declared here
   48 |  int n, m, r[N];
      |            ^