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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

hdu 2157

發(fā)布時(shí)間:2025/3/16 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 2157 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

How many ways??

Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)


Problem Description 春天到了, HDU校園里開(kāi)滿了花, 姹紫嫣紅, 非常美麗. 蔥頭是個(gè)愛(ài)花的人, 看著校花校草競(jìng)相開(kāi)放, 漫步校園, 心情也變得舒暢. 為了多看看這迷人的校園, 蔥頭決定, 每次上課都走不同的路線去教室, 但是由于時(shí)間問(wèn)題, 每次只能經(jīng)過(guò)k個(gè)地方, 比方說(shuō), 這次蔥頭決定經(jīng)過(guò)2個(gè)地方, 那他可以先去問(wèn)鼎廣場(chǎng)看看噴泉, 再去教室, 也可以先到體育場(chǎng)跑幾圈, 再到教室. 他非常想知道, 從A 點(diǎn)恰好經(jīng)過(guò)k個(gè)點(diǎn)到達(dá)B點(diǎn)的方案數(shù), 當(dāng)然這個(gè)數(shù)有可能非常大, 所以你只要輸出它模上1000的余數(shù)就可以了. 你能幫幫他么?? 你可決定了蔥頭一天能看多少校花哦
Input 輸入數(shù)據(jù)有多組, 每組的第一行是2個(gè)整數(shù) n, m(0 < n <= 20, m <= 100) 表示校園內(nèi)共有n個(gè)點(diǎn), 為了方便起見(jiàn), 點(diǎn)從0到n-1編號(hào),接著有m行, 每行有兩個(gè)整數(shù) s, t (0<=s,t<n) 表示從s點(diǎn)能到t點(diǎn), 注意圖是有向的.接著的一行是兩個(gè)整數(shù)T,表示有T組詢問(wèn)(1<=T<=100),
接下來(lái)的T行, 每行有三個(gè)整數(shù) A, B, k, 表示問(wèn)你從A 點(diǎn)到 B點(diǎn)恰好經(jīng)過(guò)k個(gè)點(diǎn)的方案數(shù) (k < 20), 可以走重復(fù)邊。如果不存在這樣的走法, 則輸出0
當(dāng)n, m都為0的時(shí)候輸入結(jié)束

Output 計(jì)算每次詢問(wèn)的方案數(shù), 由于走法很多, 輸出其對(duì)1000取模的結(jié)果
Sample Input 4 4 0 1 0 2 1 3 2 3 2 0 3 2 0 3 3 3 6 0 1 1 0 0 2 2 0 1 2 2 1 2 1 2 1 0 1 3 0 0
Sample Output 2 0 1 3
解題思路:這道題目很容易會(huì)往圖論+dp的方向去思考,但這么思考就麻煩了。。其實(shí)這里只是用到了一點(diǎn)離散數(shù)學(xué)里面的知識(shí),根據(jù)“可達(dá)”建立好01矩陣后,只要求出矩陣的k次冪,就是經(jīng)過(guò)k個(gè)點(diǎn)的路徑條數(shù),我記得這是離散里面關(guān)系閉包講的。。 AC: #include<iostream> #include<cstdio> #include<cstring> using namespace std;const int mod = 1000; struct Matrix {int m[20][20]; }; int n,m,A,B,t,k;Matrix mul(Matrix a, Matrix b) {Matrix c;memset(c.m,0,sizeof(c.m));for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)for(int k = 0; k < n; k++){c.m[i][j] = (c.m[i][j] + a.m[i][k]*b.m[k][j]) % mod;}return c; }Matrix power(Matrix a,int k) //矩陣快速冪 {Matrix ans;memset(ans.m,0,sizeof(ans.m));for(int i = 0; i < n; i++)ans.m[i][i] = 1;Matrix tmp = a;while(k){if(k & 1) ans = mul(ans,tmp);tmp = mul(tmp,tmp);k >>= 1;}return ans; }int main() { Matrix a,b;while(scanf("%d%d",&n,&m)!=EOF && m+n){memset(a.m,0,sizeof(a.m));for(int i = 1; i <= m; i++){int s,t;scanf("%d%d",&s,&t);a.m[s][t] = 1;}scanf("%d",&t);while(t--){scanf("%d%d%d",&A,&B,&k);b = power(a,k);printf("%d\n",b.m[A][B]);}}return 0; }

總結(jié)

以上是生活随笔為你收集整理的hdu 2157的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。