因为 whk,没有参加 OL3,赛后补题。
由于常数问题,必须要 bitset 优化矩阵板子才能通过。
#include <cstdio>
#include <bitset>
const int MAXN = 1e2 + 9;
int n;
struct Matrix{
std::bitset<MAXN> a[MAXN];
Matrix operator*(const Matrix& b)const{
Matrix res;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
if(a[i][j])
res.a[i] ^= b.a[j];
return res;
}
}ret[32], ans;
int m, q;
unsigned int f[MAXN], a;
int main(){
std::scanf("%d%d%d", &n, &m, &q);
for(int i = 1; i <= n; ++i)
std::scanf("%u", f + i);
for(int i = 1; i <= m; ++i){
int u, v;
std::scanf("%d%d", &u, &v);
ret[0].a[u][v] = 1;
ret[0].a[v][u] = 1;
}
for(int i = 1; i < 32; ++i)
ret[i] = ret[i - 1] * ret[i - 1];
while(q--){
std::scanf("%u", &a);
ans = ret[0]; --a;
for(unsigned int i = 0; i < 32u; ++i)
if(a & (1u << i))
ans = ans * ret[i];
unsigned int bit = 0u;
for(int i = 1; i <= n; ++i)
if(ans.a[1][i])
bit ^= f[i];
std::printf("%u\n", bit);
}
return 0;
}