救救我
查看原帖
救救我
1164775
Jadonyzx楼主2024/3/30 20:30
#include<bits/stdc++.h>
#define int unsigned int
#define maxn 110
using namespace std;
inline int read(){
	register int x=0;
	char ch=getchar();
	while(ch<'0'||ch>'9')ch=getchar();
	while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
	return x;
}
inline void write(int x){
	if(x<0){
		putchar('-');
		write(-x);
		return;
	}
	if(x>=10)write(x/10);
	putchar(x%10+'0');
	return;
}
struct jarvis{
	int hang,lie,blo[maxn][maxn];
}mp,f[40];
int n,m,q,ask[maxn],mmax;
jarvis operator *(const jarvis insigne,const jarvis andy){
	jarvis bob;bob.hang=insigne.hang;bob.lie=andy.lie;
	for(register int i=1;i<=insigne.hang;++i){
		for(register int j=1;j<=andy.lie;++j){
			bob.blo[i][j]=0;
			for(register int k=1;k<=insigne.lie;++k){
				bob.blo[i][j]^=insigne.blo[i][k]*andy.blo[k][j];
			}
		}
	}
	return bob;
}
jarvis operator +(const jarvis insigne,const jarvis andy){
	jarvis bob;
	bob.hang=insigne.hang;bob.lie=insigne.lie;
	for(int i=1;i<=insigne.hang;++i)
	for(int j=1;j<=insigne.lie;++j)
	bob.blo[i][j]^=insigne.blo[i][j]+andy.blo[i][j];
	return bob;
}
void init(jarvis z){
	f[1]=z;
	int ccc=1,ioi=2;
	while(ccc<=mmax){
		z=z*z;
		f[ioi]=z;
		ccc*=2;
		ioi++;
	}
	return;
}
jarvis jarvis_pow(jarvis gyh,int zz){
	jarvis sign;
	sign.hang=sign.lie=n;
	for(int i=1;i<=n;++i)
	for(int j=1;j<=n;++j)
	sign.blo[i][j]=0;
	int flag=1;
	while(zz){
		if(zz&1)sign=sign+f[flag];
		zz/=2;
		flag++;
	}
	return sign;
}
signed main(){
	n=read();m=read();q=read();
	jarvis dream;
	dream.hang=n;dream.lie=1;
	mp.hang=mp.lie=n;
	for(register int i=1;i<=n;++i)dream.blo[i][1]=read();
	for(register int i=1;i<=m;++i){
		int u=read(),v=read();
		mp.blo[u][v]=1;
		mp.blo[v][u]=1;
	}
	for(register int i=1;i<=q;++i){ask[i]=read();mmax=max(mmax,ask[i]);}
	mmax++;
	int aaa=0;
	while(mmax){aaa++;mmax/=2;}
	mmax=aaa;
	init(mp);
	for(register int i=1;i<=q;++i){
		jarvis ANS=jarvis_pow(mp,ask[i]);
		register int Ans=0;
		for(register int ii=1;ii<=n;++ii){
			if(ANS.blo[ii][1])Ans^=dream.blo[ii][1];
		}
		write(Ans);
		putchar('\n');
	}
	return 0;
}
/*
3 3 3
1 3 0
1 2
1 3
2 3
1
2
3

ans:
3
3
3
*/
2024/3/30 20:30
加载中...