K>=12 就有问题了,但是不知道为什么,找不到问题。
https://www.luogu.com.cn/record/124166457
#include<bits/stdc++.h>
using namespace std;
const int N=55,mod=10000;
int n,m,st,en,K;
int dnt[15][N];
vector<int> g[N];
long long t[15][N][N];
int read(){
int f=1,k=0;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
k=k*10+c-'0';
c=getchar();
}
return f*k;
}
long long a[N],b[N][N];
long long c[N],d[N][N];
int main(){
n=read();m=read();
st=read();en=read();K=read();
for(int i(1);i<=m;++i){
int u=read(),v=read();
g[u].push_back(v);
g[v].push_back(u);
}
int nfi=read();
for(int i(1);i<=nfi;++i){
int T=read(),p[5];
for(int j(0);j<T;++j){
p[j]=read();
for(int k(j);k<12;k+=T)dnt[k][p[j]]=1;
}
}
for(int i(0);i<n;++i)if(!dnt[0][i])t[0][i][i]=1;
for(int T(1);T<12;++T)
for(int i(0);i<n;++i)
for(int x(0);x<n;++x){
if(dnt[T-1][x])continue;
for(int v:g[x])
if(!dnt[T][v])
t[T][i][v]=(t[T][i][v]+t[T-1][i][x])%mod;
}
int x=K/12;
a[st]=1;
memcpy(b,t[11],sizeof b);
while(x){
if(x&1){
memset(c,0,sizeof c);
for(int j(0);j<n;++j)
for(int k(0);k<n;++k)
c[j]=(c[j]+a[k]*b[k][j]%mod)%mod;
memcpy(a,c,sizeof a);
}
memset(d,0,sizeof d);
for(int i(0);i<n;++i)
for(int j(0);j<n;++j)
for(int k(0);k<n;++k)
d[i][j]=(d[i][j]+b[i][k]*b[k][j]%mod)%mod;
memcpy(b,d,sizeof b);
x>>=1;
}
x=K%12;
memset(c,0,sizeof c);
for(int j(0);j<n;++j)
for(int k(0);k<n;++k)
c[j]=(c[j]+a[k]*t[x][k][j]%mod)%mod;
memcpy(a,c,sizeof a);
printf("%lld",a[en]);
return 0;
}
thx qwq