题目分享B 三代目
作者:互联网
题意:q次询问x到y恰好经过k条边的方案数
分析:
这题和之前题目分享D 二代目差不多吧,而且比他简单
D题如果不用矩阵快速幂会t,但这个题可以预处理出dp[i][j][k]表示i到j经过k个点的方案数,然后直接输出即可
这个题直接预处理复杂度是20^4=160000 矩阵快速幂复杂度是20*20*100*lg20,比预处理稍慢一点,但代码量相比较而言比较大
所以我选择直接dp
附上D题题解链接 https://www.cnblogs.com/lin4xu/p/12789946.html
代码:
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=1e2+1; const int mod=1e3; int dp[maxn][maxn][maxn]; int main() { int n,m,x,y,z,t; while(scanf("%d%d",&n,&m)!=EOF&&(n||m)) { memset(dp,0,sizeof(dp)); while(m--) { scanf("%d%d",&x,&y); dp[x][y][1]=1; } for(int i=0;i<n;i++) dp[i][i][0]=1; for(int p=2;p<maxn;p++) for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(dp[k][j][1]) dp[i][j][p]+=dp[i][k][p-1],dp[i][j][p]%=mod; scanf("%d",&t); while(t--) { scanf("%d%d%d",&x,&y,&z); printf("%d\n",dp[x][y][z]); } } return 0; }
标签:include,题目,int,maxn,20,三代,分享,预处理,dp 来源: https://www.cnblogs.com/lin4xu/p/12909875.html