#include <bits/stdc++.h> using namespace std; int n,m,a[44],b[44],res[44],x[1010],y[1010]; void rec(int l) { if (l>n) { for (int i=1; i<=n; i++) a[i]=b[i]; for (int i=0; i<m; i++) { int o=(a[x[i]]|a[y[i]]); a[x[i]]=(a[x[i]]&a[y[i]]); a[y[i]]=o; } int cnt=0; bool was=false; for (int i=1; i<=n; i++) if (a[i]==1) { if (was) { if (a[i-1]==0) { cnt=-1; break; } } else was=true; ++cnt; } if (cnt>=0) res[cnt]^=1; return; } b[l]=0; rec(l+1); b[l]=1; rec(l+1); } int main() { scanf("%d%d",&n,&m); for (int i=0; i<m; i++) scanf("%d%d",&x[i],&y[i]); rec(1); for (int i=1; i<=n; i++) printf("%d%c",res[i],(i==n)?'\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 | #include <bits/stdc++.h> using namespace std; int n,m,a[44],b[44],res[44],x[1010],y[1010]; void rec(int l) { if (l>n) { for (int i=1; i<=n; i++) a[i]=b[i]; for (int i=0; i<m; i++) { int o=(a[x[i]]|a[y[i]]); a[x[i]]=(a[x[i]]&a[y[i]]); a[y[i]]=o; } int cnt=0; bool was=false; for (int i=1; i<=n; i++) if (a[i]==1) { if (was) { if (a[i-1]==0) { cnt=-1; break; } } else was=true; ++cnt; } if (cnt>=0) res[cnt]^=1; return; } b[l]=0; rec(l+1); b[l]=1; rec(l+1); } int main() { scanf("%d%d",&n,&m); for (int i=0; i<m; i++) scanf("%d%d",&x[i],&y[i]); rec(1); for (int i=1; i<=n; i++) printf("%d%c",res[i],(i==n)?'\n':' '); return 0; } |