How many ways??(hdu 2157)

来源:互联网 发布:韩春雨造假知乎 编辑:程序博客网 时间:2024/05/04 05:11


#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;}


0 0
原创粉丝点击