#include<stdio.h>
struct mart
{
intmat[25][25];
};
mart martx;
int n;
mart multi(mart a,mart b)
{
martc;
inti,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
c.mat[i][j]=0;
for(k=1;k<=n;k++)
c.mat[i][j]=(c.mat[i][j]+a.mat[i][k]*b.mat[k][j])00;
}
return c;
}
mart power(int k)
{
martp,q;
inti,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
p.mat[i][j]=martx.mat[i][j];
if(i==j)
q.mat[i][j]=1;
else
q.mat[i][j]=0;
}
if(k==0)
return q;
while(k!=1)
{
if(k&1)
{
k--;
q=multi(p,q);
}
else
{
k=k>>1;
p=multi(p,p);
}
}
p=multi(p,q);
returnp;
}
int main()
{
inti,j,m,q,a,b,k;
marttmp;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
martx.mat[i][j]=0;
for(i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
a=a+1,b=b+1;
martx.mat[a][b]=1;
}
scanf("%d",&q);
while(q--)
{
scanf("%d%d%d",&a,&b,&k);
a=a+1,b=b+1;
tmp=power(k);
printf("%d\n",tmp.mat[a][b]00);
}
}
return0;
}
How many ways??(hdu 2157)
最新推荐文章于 2021-04-06 08:55:54 发布