#include <bits/stdc++.h> using namespace std; constexpr int M = 1e3+7; int n, m; int a[M], b[M]; int ans[40]; int spojne(int x){ vector<bool> v(n,0); for(int bit=0; bit<n; bit++){ if(x & (1<<bit)) v[bit] = 1; } for(int i=1; i<=m; i++){ if(v[a[i]] == 1 && v[b[i]] == 0) swap(v[a[i]], v[b[i]]); } int f = 0, l = 0; for(int i=0; i<n; i++){ if(v[i]){ f = i; break; } } for(int i=n-1; i>=0; i--){ if(v[i]){ l = i; break; } } return l-f+1; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //O(2^n * (n+m) ) cin >> n >> m; for(int i=1; i<=m; i++){ cin >> a[i] >> b[i]; a[i]--; b[i]--; } for(int maska=1; maska<(1<<n); maska++){ int zapalone = __builtin_popcount(maska); if(spojne(maska) == zapalone) ans[zapalone]++; } for(int i=1; i<=n; i++) cout << (ans[i] & 1) << ' '; cout << '\n'; 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 | #include <bits/stdc++.h> using namespace std; constexpr int M = 1e3+7; int n, m; int a[M], b[M]; int ans[40]; int spojne(int x){ vector<bool> v(n,0); for(int bit=0; bit<n; bit++){ if(x & (1<<bit)) v[bit] = 1; } for(int i=1; i<=m; i++){ if(v[a[i]] == 1 && v[b[i]] == 0) swap(v[a[i]], v[b[i]]); } int f = 0, l = 0; for(int i=0; i<n; i++){ if(v[i]){ f = i; break; } } for(int i=n-1; i>=0; i--){ if(v[i]){ l = i; break; } } return l-f+1; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //O(2^n * (n+m) ) cin >> n >> m; for(int i=1; i<=m; i++){ cin >> a[i] >> b[i]; a[i]--; b[i]--; } for(int maska=1; maska<(1<<n); maska++){ int zapalone = __builtin_popcount(maska); if(spojne(maska) == zapalone) ans[zapalone]++; } for(int i=1; i<=n; i++) cout << (ans[i] & 1) << ' '; cout << '\n'; return 0; } |