// #include <bits/stdc++.h> #define FAST ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); #include <iostream> #include <vector> using namespace std; bool is_good(uint64_t n) { bool ones = false; while (n && !(n&1)) { n>>=1; } while (n && (n&1)) { n>>=1; } return n==0; } int count_onez(uint64_t n) { int total=0; while (n) { if (n&1) total++ ; n>>=1; } return total; } bool solve(uint64_t n, vector<pair<int,int>> &ops) { for (auto op: ops) { if ((n&(1 << (op.first-1))) && !((n&(1 << (op.second-1))))) { n &= ~((uint64_t)1 << (op.first-1)); n |= ((uint64_t)1 << (op.second-1)); } } return is_good(n); } // TODO: // check which bites are affected and reuse already calculated values; int main() { FAST int n, m; cin >> n >> m; uint64_t to = ((uint64_t)1<<(n))-1 ; vector<pair<int, int>> commands(m); int tmp1, tmp2; for (int i = 0 ; i < m ; i++) { cin >> tmp1 >> tmp2; commands[i] = {tmp1, tmp2}; } vector<bool> out(n+1); int tmp; for (int i = 1 ; i <= to; i++) { if (solve(i, commands)) { tmp = count_onez(i); out[tmp] = !out[tmp]; } } out.erase(out.begin()); for (auto v: out){ if (v) { cout << "1 "; } else { cout << "0 "; } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | // #include <bits/stdc++.h> #define FAST ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); #include <iostream> #include <vector> using namespace std; bool is_good(uint64_t n) { bool ones = false; while (n && !(n&1)) { n>>=1; } while (n && (n&1)) { n>>=1; } return n==0; } int count_onez(uint64_t n) { int total=0; while (n) { if (n&1) total++ ; n>>=1; } return total; } bool solve(uint64_t n, vector<pair<int,int>> &ops) { for (auto op: ops) { if ((n&(1 << (op.first-1))) && !((n&(1 << (op.second-1))))) { n &= ~((uint64_t)1 << (op.first-1)); n |= ((uint64_t)1 << (op.second-1)); } } return is_good(n); } // TODO: // check which bites are affected and reuse already calculated values; int main() { FAST int n, m; cin >> n >> m; uint64_t to = ((uint64_t)1<<(n))-1 ; vector<pair<int, int>> commands(m); int tmp1, tmp2; for (int i = 0 ; i < m ; i++) { cin >> tmp1 >> tmp2; commands[i] = {tmp1, tmp2}; } vector<bool> out(n+1); int tmp; for (int i = 1 ; i <= to; i++) { if (solve(i, commands)) { tmp = count_onez(i); out[tmp] = !out[tmp]; } } out.erase(out.begin()); for (auto v: out){ if (v) { cout << "1 "; } else { cout << "0 "; } } } |