日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【矩阵乘法】沼泽鳄鱼(ssl 2511)

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【矩阵乘法】沼泽鳄鱼(ssl 2511) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

沼澤鱷魚

ssl 2511

題目大意

給你一個無向圖,有一些鱷魚有周期性地在這個圖中走(鱷魚不用沿著邊走,周期為2或3或4),問你從初始點走到最終點走k個單位時間,不在點和邊上停下,不在同一時間和鱷魚在同一點,有多少種走法

輸入樣例

6 8 1 5 3 0 2 2 1 1 0 0 5 5 1 1 4 4 3 3 5 1 3 0 5 1

輸出樣例

2

樣例解釋

時刻 -----------0 1 2 3
食人魚位置 --0 5 1 0
路線一 --------1 2 0 5
路線二 --------1 4 3 5

數據范圍

1?N?501 \leqslant N \leqslant 501?N?50
1?K?2,000,000,0001 \leqslant K \leqslant 2,000,000,0001?K?2,000,000,000
1?NFish?201 \leqslant NFish \leqslant 201?NFish?20

解題思路

可以拿2,3,4的最小公倍數12當成一個單位時間
然后預處理出12個時間的矩陣
然后快矩陣速冪
最后把余數處理一下即可

代碼

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define wyc 10000 using namespace std; int n, m, t, x, y, st, ed, fn, s[100], v[100][100]; struct matrix {int n, m, a[60][60];matrix operator *(matrix const &b) const{matrix c;c.n = n;c.m = b.m;for (int i = 0; i < c.n; ++i)for (int j = 0; j < c.m; ++j)c.a[i][j] = 0;for (int i = 0; i < c.n; ++i)for (int k = 0; k < m; ++k)for (int j = 0; j < c.m; ++j)c.a[i][j] = (c.a[i][j] + a[i][k] * b.a[k][j] % wyc) % wyc;return c;} }A, B, C; matrix solve(matrix b, int x)//預處理 {matrix a;for (int i = 1; i <= x; ++i){matrix c = b;for (int j = 1; j <= fn; ++j)for (int k = 0; k < n; ++k)c.a[k][v[j][i % s[j]]] = 0;//有鱷魚的地方直接清空if (i > 1) a = a * c;else a = c;}return a; } void Counting(int x) {while(x){if (x&1) A = A * B;B = B * B;x>>=1;}return; } int main() {scanf("%d%d%d%d%d", &n, &m, &st, &ed, &t);C.n = C.m = A.m = n;A.n = 1;A.a[0][st] = 1;for (int i = 1; i <= m; ++i){scanf("%d%d", &x, &y);C.a[x][y] = 1;C.a[y][x] = 1;}scanf("%d", &fn);for (int i = 1; i <= fn; ++i){scanf("%d", &s[i]);for (int j = 0; j < s[i]; ++j)scanf("%d", &v[i][j]);}B = solve(C, 12);Counting(t / 12);if (t % 12) A = A * solve(C, t % 12);//解決余數printf("%d", A.a[0][ed]);return 0; }

總結

以上是生活随笔為你收集整理的【矩阵乘法】沼泽鳄鱼(ssl 2511)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。