#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
#define ll long long
ll 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;
}
UVA11551-Experienced Endeavour
最新推荐文章于 2020-03-23 18:40:53 发布