#include <bits/stdc++.h> using namespace std; int n, m; struct Order{ int a, b; }; vector<Order> orders; vector<vector<vector<bool>>> posibilities; void generate_posibilities(int n){ posibilities.assign(n + 1, vector<vector<bool>>()); for(int i = 0; i < 1<<n; ++i){ int pop_cnt = __builtin_popcount(i); posibilities[pop_cnt].push_back(vector<bool>()); for(int j = 0; j < n; ++j){ posibilities[pop_cnt].back().push_back(i & (1<<j)); } } } vector<bool> get_posibility(int n, int i){ vector<bool> result; for(int j = 0; j < n; ++j){ result.push_back(i & (1<<j)); } return result; } int get_posibility_value(vector<bool> pos){ int result = 0; for(int i = 0; i < pos.size(); ++i){ if(pos[i]){ result |= (1<<i); } } return result; } bool check_position(vector<bool> pos){ for(Order p : orders){ if(p.a < pos.size() && p.b < pos.size() && pos[p.a] && !pos[p.b]){ swap(pos[p.a], pos[p.b]); } } bool ended = false, startet = false; for(int p : pos){ if(!startet && !ended && p) startet = true; if(startet && !p) ended = true; if(ended && p) return false; } return true; } void print_all_posibilities(){ for(int i = 0; i < posibilities.size(); ++i){ cout<<i<<":\n"; for(auto p : posibilities[i]){ for(auto pp : p){ cout<<pp<<" "; } cout<<" : "<<check_position(p)<<"\n"; } } } int main() { ios_base::sync_with_stdio(0);cout.tie(0);cin.tie(0); cin>>n>>m; for(int i = 0, a, b; i < m; ++i) { cin>>a>>b; orders.push_back({a - 1, b - 1}); } generate_posibilities(n); //print_all_posibilities(); for(int i = 1; i <= n; ++i){ int result = 0; for(auto p : posibilities[i]){ if(check_position(p)){ result++; } } cout<<result%2<<" "; } return 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | #include <bits/stdc++.h> using namespace std; int n, m; struct Order{ int a, b; }; vector<Order> orders; vector<vector<vector<bool>>> posibilities; void generate_posibilities(int n){ posibilities.assign(n + 1, vector<vector<bool>>()); for(int i = 0; i < 1<<n; ++i){ int pop_cnt = __builtin_popcount(i); posibilities[pop_cnt].push_back(vector<bool>()); for(int j = 0; j < n; ++j){ posibilities[pop_cnt].back().push_back(i & (1<<j)); } } } vector<bool> get_posibility(int n, int i){ vector<bool> result; for(int j = 0; j < n; ++j){ result.push_back(i & (1<<j)); } return result; } int get_posibility_value(vector<bool> pos){ int result = 0; for(int i = 0; i < pos.size(); ++i){ if(pos[i]){ result |= (1<<i); } } return result; } bool check_position(vector<bool> pos){ for(Order p : orders){ if(p.a < pos.size() && p.b < pos.size() && pos[p.a] && !pos[p.b]){ swap(pos[p.a], pos[p.b]); } } bool ended = false, startet = false; for(int p : pos){ if(!startet && !ended && p) startet = true; if(startet && !p) ended = true; if(ended && p) return false; } return true; } void print_all_posibilities(){ for(int i = 0; i < posibilities.size(); ++i){ cout<<i<<":\n"; for(auto p : posibilities[i]){ for(auto pp : p){ cout<<pp<<" "; } cout<<" : "<<check_position(p)<<"\n"; } } } int main() { ios_base::sync_with_stdio(0);cout.tie(0);cin.tie(0); cin>>n>>m; for(int i = 0, a, b; i < m; ++i) { cin>>a>>b; orders.push_back({a - 1, b - 1}); } generate_posibilities(n); //print_all_posibilities(); for(int i = 1; i <= n; ++i){ int result = 0; for(auto p : posibilities[i]){ if(check_position(p)){ result++; } } cout<<result%2<<" "; } return 0; } |