Submission #45480

#TimeUsernameProblemLanguageResultExecution timeMemory
45480AbelyanToy Train (IOI17_train)C++14
Compilation error
0 ms0 KiB
#include "train.h" #include <algorithm> #include <vector> #include <map> #include <set> #include <queue> #include <unordered_map> #include <unordered_set> using namespace std; const int N = 5006; int n, m; vector<int> g[N],ing[N]; bool col[N],chrg[N]; unordered_set <int> R; unordered_set<int> rev(unordered_set<int> &s){ unordered_set<int> ans; for (int i = 0; i < n; i++){ if (s.count(i) == 0) ans.insert(i); } return ans; } unordered_set<int> fa(unordered_set<int> &s){ unordered_set<int> ans; queue<int> q; for (auto k : s){ q.push(k); ans.insert(k); } while (!q.empty()){ int v = q.front(); q.pop(); for (auto to : ing[v]){ if (ans.count(to)) continue; bool mb = true; for (auto k : g[to]){ mb &= ans.count(k) == 1; } if (col[to] || mb){ ans.insert(to); q.push(to); } } } return ans; } unordered_set<int> fb(unordered_set<int> &s){ unordered_set<int> ans; queue<int> q; for (auto k : s){ q.push(k); ans.insert(k); } while (!q.empty()){ int v = q.front(); q.pop(); for (auto to : ing[v]){ if (ans.count(to)==1) continue; bool mb = true; for (auto k : g[to]){ mb &= ans.count(k) == 1; } if (!col[to] || mb){ ans.insert(to); q.push(to); } } } return ans; } unordered_set<int> intersect(unordered_set<int> &a, unordered_set<int> &b){ unordered_set<int> ans; for (auto i : a){ if (b.count(i)) ans.insert(i); } return ans; } 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++){ g[u[i]].push_back(v[i]); ing[v[i]].push_back(u[i]); } for (int i = 0; i < n; i++){ if (a[i]){ col[i] = true; } } for (int i = 0; i < n; i++){ if (r[i]) chrg[i] = true; } while (1){ for (int i = 0; i < n; i++){ if (chrg[i]) R.insert(i); } unordered_set <int> far = fa(R); unordered_set <int> x = fb(rev(far)); unordered_set <int> ht = intersect(far, x); bool mb = false; for (auto k : ht){ if (chrg[k]) mb = true, chrg[k] = false; } if (!mb){ vector<int> ans(n,1); for (auto k : x){ ans[k] = 0; } return ans; } } } /* 2 4 0 1 1 0 0 0 0 1 1 0 1 1 */

Compilation message (stderr)

train.cpp: In function 'std::vector<int> who_wins(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
train.cpp:101:67: error: cannot bind non-const lvalue reference of type 'std::unordered_set<int>&' to an rvalue of type 'std::unordered_set<int>'
   unordered_set <int>  far = fa(R); unordered_set <int> x = fb(rev(far)); unordered_set <int> ht = intersect(far, x);
                                                                ~~~^~~~~
train.cpp:49:20: note:   initializing argument 1 of 'std::unordered_set<int> fb(std::unordered_set<int>&)'
 unordered_set<int> fb(unordered_set<int> &s){
                    ^~