Submission #1064316

#TimeUsernameProblemLanguageResultExecution timeMemory
1064316TheQuantiXToy Train (IOI17_train)C++17
28 / 100
306 ms2648 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; constexpr ll INF = 1000000000000000000LL; ll n, m, q, k, x, y, a, c; vector<ll> G[5000]; vector<ll> Gr[5000]; vector<int> get_total(vector<int> a, vector<int> r, vector<int> u, vector<int> v, vector<ll> cnt) { queue<ll> q; vector<int> vis(n); for (int i = 0; i < n; i++) { if (r[i]) { q.push(i); } } while (!q.empty()) { ll x = q.front(); q.pop(); if (vis[x]) { continue; } vis[x] = 1; for (auto i : G[x]) { if (a[i] && !vis[i]) { q.push(i); } if (!a[i]) { cnt[i]--; if (cnt[i] == 0 && !vis[i]) { q.push(i); } } } } return vis; } vector<int> solve1(vector<int> a, vector<int> r, vector<int> u, vector<int> v) { vector<int> ans(n); for (int i = n - 1; i >= 0; i--) { if (r[i]) { ans[i] = 1; } bool fl; if (a[i]) { fl = 0; for (auto j : Gr[i]) { if (ans[j]) { fl = 1; break; } } } else { fl = 1; for (auto j : Gr[i]) { if (!ans[j]) { fl = 0; break; } } } ans[i] = fl; } return ans; } vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) { n = a.size(); m = u.size(); vector<ll> cnt(n); vector<int> ans(n); for (int i = 0; i < n; i++) { G[i].clear(); Gr[i].clear(); } set<ll> st; for (int i = 0; i < m; i++) { cnt[u[i]]++; st.insert(v[i] - u[i]); G[v[i]].push_back(u[i]); Gr[u[i]].push_back(v[i]); } if (st.count(0)) { st.erase(0); } if (st.count(1)) { st.erase(1); } if (st.size() == 0) { return solve1(a, r, u, v); } auto cnt1 = cnt; for (int i = 0; i < n; i++) { if (r[i]) { cnt = cnt1; queue<ll> q; vector<int> vis(n); q.push(i); while (!q.empty()) { ll x = q.front(); q.pop(); if (vis[x]) { continue; } vis[x] = 1; for (auto j : G[x]) { if (a[j] && !vis[j]) { q.push(j); } if (!a[j]) { cnt[j]--; if (cnt[j] == 0 && !vis[j]) { q.push(j); } } } } bool fl; if (a[i]) { fl = 0; for (int j : Gr[i]) { if (vis[j]) { fl = 1; break; } } } else { fl = 1; for (int j : Gr[i]) { if (!vis[j]) { fl = 0; break; } } } if (fl) { for (int j = 0; j < n; j++) { ans[j] |= vis[j]; } } } } 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...