#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<iostream>
#include<queue>
#include<bitset>
#include<vector>
#include<iomanip>
#include<algorithm>
using namespace std;
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<VVI> VVVI;
typedef long long LL;
const int maxn = 211111;
int a[35];
int A[35], B[35];
int Det(int n) {
int i, j, k;
for (i = 0; i < n; ++i) {
for (j = i + 1; j < n; ++j) {
if (a[j] & (1 << i)) {
if (a[i] & (1 << i))
a[i] ^= a[j];
swap(a[i], a[j]);
}
}
}
int cnt = 0, t, mask = (1 << n) - 1;
for (k = 0; k < n; ++k) {
t = a[k] & mask;
if ((!t) && (a[k] & (1 << n)))
return -1;
cnt += a[k] == 0;
}
return 1 << cnt;
}
int main() {
ios::sync_with_stdio(false);
int T, n, i, u, v;
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
memset(a, 0, sizeof(a));
for (i = 0; i < n; ++i)
scanf("%d", A + i);
for (i = 0; i < n; ++i)
scanf("%d", B + i), B[i] ^= A[i];
for (i = 0; i < n; ++i)
a[i] |= (B[i] << n), a[i] |= 1 << i;
while (scanf("%d%d", &u, &v) && (u | v)) {
--u, --v;
a[v] |= (1 << u);
}
int ans = Det(n);
if (~ans)
printf("%d\n", ans);
else
puts("Oh,it's impossible~!!");
}
return 0;
}
poj 1830 高斯消元
最新推荐文章于 2020-12-31 17:20:39 发布