vector<vector<ll>> multiply(const vector<vector<ll>>& a, const vector<vector<ll>>& b)
{
vector<vector<ll>> ret(10, vector<ll>(10));
for (int i = 1; i <= 8; i++)
{
for (int j = 1; j <= 8; j++)
{
ll elem = 0;
for (int k = 1; k <= 8; k++)
{
elem += (a[i][k] * b[k][j]) % MOD;
}
ret[i][j] = elem % MOD;
}
}
return ret;
}
while (true)
{
if (D == 0)
break;
if (D % 2 == 1)
{
cache = multiply(cache, graph);
D -= 1;
}
graph = multiply(graph, graph);
D /= 2;
}
인접행렬과 인접행렬의 거듭제곱
(문제) 아래 그래프의 꼭짓점 P에서 R까지 3개의 변을 거쳐가는 모든 방법의 수는? ...
blog.naver.com
엄청 잘만드신 템플릿
https://kth990303.tistory.com/183
'알고리즘 > 알고리즘 이론, 템플릿' 카테고리의 다른 글
분할 정복을 이용한 거듭제곱 (0) | 2023.07.17 |
---|---|
가젯 템플릿 (0) | 2023.06.18 |
스프라그 그런디 (0) | 2023.06.05 |
이분매칭 (0) | 2023.06.02 |
MST - Kruskal (0) | 2023.04.03 |