#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; } |
English