为啥这题一轮交换完不break会只因。
还有我在高斯消元前加了一个shuffle也会只因。
是数据有问题还是我有问题?
#include<bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for(auto i = (a); i <= (b); i++)
#define per(i, a, b) for(auto i = (a); i >= (b); i--)
#define size(a) ((int)(a).size())
#define pb push_back
using vi = vector<int>;
mt19937 rnd(random_device{}());
const int N = 2010;
bitset<N> a[N];
int n;
void gauss() {
// 这里加shuffle会只因
// shuffle(a + 1, a + 1 + n, rnd);
rep(i, 1, n) {
rep(j, i, n) if(a[j][i]) {
swap(a[i], a[j]);
// 这里不break会只因
break;
}
rep(j, 1, n) if(i != j && a[j][i]) a[j] ^= a[i];
}
rep(i, 1, n) if(!a[i][i] && a[i][n + 1]) {
printf("Impossible\n");
return;
}
vi v;
rep(i, 1, n) if(a[i][i] && a[i][n + 1]) v.pb(i);
printf("%d\n", size(v));
for(int x: v) printf("%d ", x);
}
int main() {
scanf("%d", &n);
rep(i, 1, n) {
int k;
scanf("%d", &k);
rep(j, 1, k) {
int x;
scanf("%d", &x);
a[i][x] = 1;
}
if(k & 1) {
a[i][n + 1] = a[i][i] = 1;
}
}
gauss();
}