http://www.lydsy.com/JudgeOnline/problem.php?id=1898
做了这题,我对自己感到失望;
搞竞赛是吧,泪水汗水你肯定得选一个;
但是我感觉我选了两个;
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<ctime>
#include<cstdlib>
using namespace std;
bool f[51][51],ff[51];
int N=10,M=20,Q=1,V=5,K=100,Nfish=2,mo=10;
int out2(){
int x=rand()%N;
while(ff[x])x=rand()%N;
ff[x]=1;
cout<<x<<' ';
}
void out1(){
int x=rand()%N,y=rand()%N;
while(f[x][y]||x==y)x=rand()%N,y=rand()%N;
f[x][y]=f[y][x]=1;
cout<<x<<' '<<y<<endl;
}
int main()
{
freopen("hh.in","w",stdout);
srand(unsigned(time(0)));
cout<<N<<' '<<M<<' '<<Q<<' '<<V<<' '<<K<<endl;
for(int i=1;i<=M;i++)out1();
cout<<Nfish<<endl;
for(int i=1;i<=Nfish;i++){
memset(ff,0,sizeof ff);
int y=2+rand()%3;
cout<<y<<' ';
for(int i=1;i<=y;i++)out2();
cout<<endl;
}
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define Ll long long
using namespace std;
struct jv{
int n,m;
Ll a[100][100];
jv(){n=m=0;memset(a,0,sizeof a);}
}a,ans,c;
int f[201][05],nn;
bool ok[501];
int n,m,k,x,y,S,E,v,mo=10000;
jv cheng(jv a,jv b){
jv ans; ans.n=a.n; ans.m=b.m;
for(int i=1;i<=a.n;i++)
for(int k=1;k<=a.m;k++)if(a.a[i][k])
for(int j=1;j<=b.m;j++)if(!ok[j])
ans.a[i][j]=(ans.a[i][j]+a.a[i][k]*b.a[k][j])%mo;
return ans;
}
jv ksm(int y){
jv ans=c,a=c;
y-=1;
while(y){
if(y&1)ans=cheng(ans,a);
y>>=1;
a=cheng(a,a);
}
return ans;
}
void make(int k){
k++;
memset(ok,0,sizeof ok);
for(int i=1;i<=nn;i++){
int x=k%f[i][0];
if(!x)x=f[i][0];
ok[f[i][x]]=1;
}
}
int main()
{
// freopen("hh.in","r",stdin);
// freopen("my.out","w",stdout);
scanf("%d%d%d%d%d",&n,&m,&S,&E,&k);
a.n=a.m=n;
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
x++;y++;
a.a[y][x]=a.a[x][y]=1;
}
scanf("%d",&nn);
for(int i=1;i<=nn;i++){
scanf("%d",&f[i][0]);
for(int j=1;j<=f[i][0];j++)scanf("%d",&f[i][j]),f[i][j]++;
}
c.n=c.m=n; for(int i=1;i<=n;i++)c.a[i][i]=1;
for(int i=1;i<=12;i++){make(i);c=cheng(c,a);}
ans.n=ans.m=n; for(int i=1;i<=n;i++)ans.a[i][i]=1;
memset(ok,0,sizeof ok);
if(k>=12)ans=ksm(k/12);
for(int i=1;i<=k%12;i++){make(i);ans=cheng(ans,a);}
printf("%lld",ans.a[++S][++E]);
}