记录编号 592689 评测结果 AAAAAAAAAA
题目名称 [ZJOI 2005] 沼泽鳄鱼 最终得分 100
用户昵称 GravatarAeeE5x 是否通过 通过
代码语言 C++ 运行时间 0.177 s
提交时间 2024-07-29 11:12:30 内存使用 3.60 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define rev(x) reverse(x.begin(),x.end())
using namespace std;
const int mod=10000;
struct matrix{
	int n,m;
	int mt[60][60];
	matrix(){n=m=0;memset(mt,0,sizeof mt);}
	matrix operator*(const matrix&q)const{
		matrix ans;ans.n=n,ans.m=q.m;
		for(int i=0;i<n;i++)
			for(int j=0;j<q.m;j++)
				for(int k=0;k<m;k++)
					ans.mt[i][j]=(ans.mt[i][j]+mt[i][k]*q.mt[k][j])%mod;
		return ans;
	}
	void operator*=(const matrix&q){*this=*this*q;}
	void print(){
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++) cout<<mt[i][j]<<" ";
			cout<<endl;
		}
		cout<<"-----\n";
	}
}trans[12],ty;
int n,m,st,nd,TIM;
int main(){
	freopen("swamp.in","r",stdin);
	freopen("swamp.out","w",stdout);
	
	
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	
	cin>>n>>m>>st>>nd>>TIM;
	
	ty.n=n,ty.m=n;
	
	for(int i=1;i<=m;i++){
		int a,b;cin>>a>>b;
		ty.mt[a][b]=ty.mt[b][a]=1;
	}
	
	for(int i=0;i<12;i++) trans[i]=ty;
	
	int nfish;cin>>nfish;
	for(int i=1;i<=nfish;i++){
		int p;cin>>p;
		int lis[10]={};
		for(int j=0;j<p;j++) cin>>lis[j];
		for(int k=0;k<12;k++) for(int j=0;j<n;j++) trans[k].mt[j][lis[(k+1)%p]]=0;
	}
	
	
	matrix transSUM=trans[0];
	for(int i=1;i<12;i++) transSUM*=trans[i];
	
	matrix frm;
	frm.n=1,frm.m=n;
	frm.mt[0][st]=1;
	
	
	
	int ttt=TIM%12;
	TIM-=ttt;
	TIM/=12;
	while(TIM){
		if(TIM&1) frm*=transSUM;
		transSUM*=transSUM;
		TIM>>=1;
	}
	for(int i=0;i<ttt;i++) frm*=trans[i];
	
	
	cout<<frm.mt[0][nd];
	
		
	return 0;
}