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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu 5411

發布時間:2025/3/16 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 5411 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分析:

首先我們知道了鄰接矩陣A,那么A^k代表的就是長度為k的路徑有多少個。那么結果就是A^0+A^1+A^2+...+A^m。然后我們可以構造一個矩陣來幫助我們求解。

X = [A,E;0,E]

?==> 然后X^m 的矩陣的右上角的矩陣代表的就是A^0+A^1+A^2+...+A^m。


代碼:

#include<iostream> #include<cstdio> #include<cstring> using namespace std;const int maxn = 105; const int mod = 2015; struct Matrix {int m[maxn][maxn];Matrix(){memset(m,0,sizeof(m));} }; int n,m; Matrix I;Matrix mul(Matrix a,Matrix b) {Matrix c;for(int i = 1; i <= 2*n; i++)for(int j = 1; j <= 2*n; j++){for(int k = 1; k <= 2*n; k++){c.m[i][j] = (c.m[i][j] + a.m[i][k]*b.m[k][j]) % mod;}}return c; }Matrix power(int k,Matrix A) {Matrix ans = I;while(k){if(k & 1) ans = mul(ans,A);A = mul(A,A);k = k >> 1;}return ans; }void init() {for(int i = 1; i < maxn; i++)I.m[i][i] = 1; }int main() { int t;init();cin>>t;while(t--){cin>>n>>m;Matrix A;for(int i = 1; i <= n; i++){int k,a;cin>>k;while(k--){cin>>a;A.m[i][a] = 1;}}for(int i=1; i<=n; i++) A.m[i][i+n] = 1; for(int i=n+1; i<=2*n; i++) A.m[i][i] = 1; int sum = 0;A = power(m,A);for(int i = 1; i <= n; i++)for(int j = n+1; j <= 2*n; j++)sum = (sum + A.m[i][j]) % mod;cout<<sum+1<<endl;}return 0; }

總結

以上是生活随笔為你收集整理的hdu 5411的全部內容,希望文章能夠幫你解決所遇到的問題。

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