虽然过了,但是是最劣解,这个代码为什么怎么卡都这么慢啊。。。
#pragma GCC ("Ofast")
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=110;
int n,m,q;
int f[maxn];
inline int read()
{
int x=0;
char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
{
x=(x<<3)+(x<<1)+(c^48);
c=getchar();
}
return x;
}
void print(int x)
{
if(x>9) print(x/10);
putchar(x%10+'0');
}
struct matrix
{
int a[maxn][maxn];
void clear()
{
for(int i(1);i<=100;++i)
for(int j(1);j<=100;++j) a[i][j]=0;
}
}ans,res,r[32];
inline matrix mul(matrix a,matrix b)
{
matrix c;
c.clear();
for(int i(1);i<=n;++i)
for(int j(1);j<=n;++j)
for(int k(1);k<=n;++k)
c.a[i][j]^=1ll*a.a[i][k]*b.a[k][j];
return c;
}
signed main()
{
n=read(),m=read(),q=read();
for(int i(1);i<=n;++i) res.a[1][i]=read();
for(int i(1);i<=m;++i)
{
int u=read(),v=read();
r[0].a[u][v]=r[0].a[v][u]=1ll;
}
for(int i(1);i<=31;++i) r[i]=mul(r[i-1],r[i-1]);
for(int k(1);k<=q;++k)
{
ans=res;
int x=read();
for(int i(0);i<=31;++i)
if(x&(1ll<<i)) ans=mul(ans,r[i]);
print(ans.a[1][1]);
putchar('\n');
}
}