记录编号 |
592689 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[ZJOI 2005] 沼泽鳄鱼 |
最终得分 |
100 |
用户昵称 |
AeeE5x |
是否通过 |
通过 |
代码语言 |
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;
}