UVA11551-Experienced Endeavour

来源:互联网 发布:游戏辅助软件制作 编辑:程序博客网 时间:2024/06/07 15:09


#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <cstring>using namespace std;#define ll long longll a[55];struct Matrix{    ll v[55][55];    Matrix()    {        memset(v,0,sizeof v);    }}k,l;Matrix mul(Matrix a,Matrix b,int d){    Matrix sum;    for(int i=0; i<d; i++)    {        for(int j=0; j<d; j++)        {            for(int k=0; k<d; k++)            {                sum.v[i][j]+=a.v[i][k]*b.v[k][j];                sum.v[i][j]%=1000;            }        }    }    return sum;}Matrix mypow(Matrix a,int n,int d){    Matrix sum=k;    while(n)    {        if(n&1) sum=mul(sum,a,d);        n>>=1;        a=mul(a,a,d);    }    return sum;}int main(){    int n,r,t;    scanf("%d",&t);    while(t--)    {        scanf("%d %d",&n,&r);        for(int i=0; i<n; i++)        {            scanf("%lld",&a[i]);            a[i]%=1000;        }        Matrix m;        for(int i=0; i<n; i++)        {            int x,y;            scanf("%d",&x);            for(int j=0;j<x;j++)            {                scanf("%d",&y);                m.v[y][i]=1;            }        }        for(int i=0; i<n; i++)            k.v[i][i]=1;        l=mypow(m,r,n);        for(int i=0; i<n; i++)        {            int ans=0;            for(int j=0;j<n;j++)            {                ans+=a[j]*l.v[j][i];                ans%=1000;            }            printf("%d",ans);            if(i!=n-1) printf(" ");            else printf("\n");        }    }    return 0;}

0 0
原创粉丝点击