请问做网站需要什么,免费产品推广软件,如何安装wordpress的插件安装教程,广州知名网站建设正题
题目链接:https://jzoj.net/senior/#main/show/3847 题目大意 nnn个点mmm条边#xff0c;第iii个点要求hih_ihi时才可以到达。求经过ttt时从点1到点nnn的方案数。 解题思路
因为hih_ihi较小#xff0c;设zi,kz_{i,k}zi,k表示iii时到kkk的方案数#xff0c;转移…正题
题目链接:https://jzoj.net/senior/#main/show/3847 题目大意
nnn个点mmm条边第iii个点要求hih_ihi时才可以到达。求经过ttt时从点1到点nnn的方案数。 解题思路
因为hih_ihi较小设zi,kz_{i,k}zi,k表示iii时到kkk的方案数转移到最大的hih_ihi后就用矩阵乘法处理。 codecodecode
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using namespace std;
const ll N75,XJQ10086;
struct matrix{ll a[N][N];
}f;
ll n,m,t,h[N],z[N][N],ans,maxs;
matrix operator*(matrix a,matrix b){matrix c;memset(c.a,0,sizeof(c.a));for(ll i1;in;i)for(ll j1;jn;j)for(ll k1;kn;k)(c.a[i][j]a.a[i][k]*b.a[k][j]%XJQ)%XJQ;return c;
}
matrix ksm(matrix f,ll b){matrix ans;memset(ans.a,0,sizeof(ans.a));for(ll i1;in;i)ans.a[i][i]1;while(b){if(b1) ansans*f;ff*f;b1;}return ans;
}
int main()
{scanf(%lld%lld%lld,n,m,t);for(ll i1;in;i){scanf(%lld,h[i]);maxsmax(maxs,h[i]);f.a[i][i];}for(ll i1;im;i){ll x,y;scanf(%lld%lld,x,y);f.a[x][y];}z[0][1]1;maxsmin(t,maxs);for(ll i1;imaxs;i){for(ll x1;xn;x)for(ll y1;yn;y)if(f.a[x][y]h[y]i)z[i][y](z[i][y]z[i-1][x]*f.a[x][y]%XJQ)%XJQ;}fksm(f,t-maxs);for(ll x1;xn;x)for(ll y1;yn;y)(z[maxs1][y]z[maxs][x]*f.a[x][y]%XJQ)%XJQ;printf(%lld,z[maxs1][n]);
}