hdu 2157 How many ways??【矩阵快速幂路径问题】
2017-08-21 19:08
351 查看
春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的路线去教室, 但是由于时间问题, 每次只能经过k个地方, 比方说, 这次葱头决定经过2个地方, 那他可以先去问鼎广场看看喷泉, 再去教室, 也可以先到体育场跑几圈, 再到教室. 他非常想知道, 从A 点恰好经过k个点到达B点的方案数, 当然这个数有可能非常大, 所以你只要输出它模上1000的余数就可以了. 你能帮帮他么?? 你可决定了葱头一天能看多少校花哦
题目链接
思路:
离散的知识(关系闭包):构建一个01可达矩阵,k次幂后的[x][y]位置的值表示x->y经过k个位置的路径数。
题目链接
思路:
离散的知识(关系闭包):构建一个01可达矩阵,k次幂后的[x][y]位置的值表示x->y经过k个位置的路径数。
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> const int mod = 1000; using namespace std; typedef long long LL; struct mat { int mapp[20][20]; }ans, base; mat mat_mul(mat A, mat B) { mat C; memset(C.mapp, 0, sizeof(C.mapp)); for(int i = 0; i < 20; i++) { for(int j = 0; j < 20; j++) { for(int k = 0; k < 20; k++) { C.mapp[i][k] = (C.mapp[i][k] + A.mapp[i][j] * B.mapp[j][k]) % mod; } } } return C; } void mat_pow(mat A, int b) { memset(ans.mapp, 0, sizeof(ans.mapp)); for(int i = 0; i < 20; i++) { ans.mapp[i][i] = 1; } while(b) { if(b & 1) ans = mat_mul(ans, A); A = mat_mul(A, A); b >>= 1; } } int main() { int n, m, k, q, x, y; while(scanf("%d %d", &n, &m) && (n + m)) { memset(base.mapp, 0, sizeof(base.mapp)); while(m--) { scanf("%d %d", &x, &y); base.mapp[x][y] = 1; } scanf("%d", &q); while(q--) { scanf("%d %d %d", &x, &y, &k); mat_pow(base, k); printf("%d\n", ans.mapp[x][y] % mod); } } return 0; }
相关文章推荐
- 【矩阵快速幂】HDU 2157 How many ways??(矩阵快速幂经典问题)
- HDU-2157 How many ways?? 矩阵快速幂
- HDU-2157-How many ways(矩阵快速幂)
- HDU - 2157 - How many ways??(矩阵快速幂)
- HDU 2157 How many ways?? 矩阵快速幂求A经过K个点到B方案数
- HDU 2157 How many ways??(矩阵快速幂)
- HDU 2157 How many ways??(矩阵快速幂)
- HDU 2157 How many ways??(矩阵快速幂)
- HDU 2157 How many ways??【矩阵快速幂】
- HDU-2157 - How many ways?? - 矩阵快速幂
- hdu 2157 How many ways?? 矩阵快速幂
- HDU 2157 How many ways?? (矩阵快速幂)
- HDU 2157 How many ways??(矩阵快速幂)
- HDU 2157 How many ways??(经典矩阵快速幂)
- hdu 2157 How many ways_ 矩阵快速幂
- hdu 2157 How many ways_ 矩阵快速幂
- hdu-2157-How many ways??【矩阵快速幂】
- HDU 2157 How many ways??(矩阵快速幂)
- hdu 2157 How many ways?? 矩阵快速幂
- HDU 2157 - How many ways??(矩阵快速幂)