題解 bzoj1297 SCOI2009 迷路

2021-07-27 17:18:07 字數 1734 閱讀 4004

windy在有向圖中迷路了。 該有向圖有 n 個節點,windy從節點 0 出發,他必須恰好在 t 時刻到達節點 n-1。 現在給出該有向圖,你能告訴windy總共有多少種不同的路徑嗎? 注意:windy不能在某個節點逗留,且通過某有向邊的時間嚴格為給定的時間。

第一行包含兩個整數,n t。 接下來有 n 行,每行乙個長度為 n 的字串。 第i行第j列為』0』表示從節點i到節點j沒有邊。 為』1』到』9』表示從節點i到節點j需要耗費的時間。

包含乙個整數,可能的路徑數,這個數可能很大,只需輸出這個數除以2009的餘數。

【輸入樣例一】

2 2

11 00

【輸入樣例二】

5 30

12045

07105

47805

12024

12345

【輸出樣例一】

【樣例解釋一】

0->0->1

【輸出樣例二】

30%的資料,滿足 2 <= n <= 5 ; 1 <= t <= 30 。 100%的資料,滿足 2 <= n <= 10 ; 1 <= t <= 1000000000 。

設圖的鄰接矩陣為

a 。在不考慮邊權(或者邊權都為1)的時候,an

中的元素an

i,j 也表示i到j經過n條邊(路徑長度為n)的方案數。

為什麼呢?我們用歸納法證明。

因為當n=1

時顯然成立,然後對於任意

n>

1 ,有an

=an−

1∗a ,則對於an

中每個元素,有 an

i,j=

∑an−

1i,k

∗ak,

j 如果性質在an

−1中成立,那麼an

i,j 就表示i到k經過n-1條邊的方案總數×k到j經過1條邊的方案總數,結果就是i到j經過n條邊的方案總數,所以an

符合性質,即如果an

−1滿足性質,那麼an

滿足性質。所以命題得到證明。

所以當題目中的圖中邊權全都是1的時候,0到n-1號節點走過邊權為m的答案就是am

0,n−

1 。

現在我們想辦法把圖中邊權變為1。

不難想到拆點:(圖中是1到2有一條邊權為5的邊的情況)

這樣圖中所有邊權都化為1,構出新圖的鄰接矩陣然後快速冪即可。

**:

#include#include#includeusing namespace std;

const int maxn=105,mod=2009;

struct matrix

}temp,i;

int n,t,size;

char s[maxn];

matrix cheng(matrix x,matrix y)}}

return re;

}matrix

pow(matrix x,int y)

return re;

}int main()

}size=n*9;

for(int i=0;i

for(int i=0;i"\n%s",s);

for(int j=0;jif(s[j]>'0')}}

temp=pow(temp,t);

printf("%d\n",temp.a[0][n-1]);

return

0;}

BZOJ1297 SCOI2009 迷路 題解

windy在有向圖中迷路了。該有向圖有 n 個節點,windy從節點 0 出發,他必須恰好在t 時刻到達節點 n 1。現在給出該有向圖,你能告訴windy總共有多少種不同的路徑嗎?注意 windy不能在某個節點逗留,且通過某有向邊的時間嚴格為給定的時間。思考當邊權為1時,a i j 1可以表示為i到...

題解 bzoj1066 SCOI2007 蜥蜴

在乙個r行c列的網格地圖中有一些高度不同的石柱,一些石柱上站著一些蜥蜴,你的任務是讓盡量多的蜥蜴逃 到邊界外。每行每列中相鄰石柱的距離為1,蜥蜴的跳躍距離是d,即蜥蜴可以跳到平面距離不超過d的任何乙個石 柱上。石柱都不穩定,每次當蜥蜴跳躍時,所離開的石柱高度減1 如果仍然落在地圖內部,則到達的石柱高...

BZOJ4571 SCOI2016 美味 題解

一家餐廳有 n 道菜,編號 1.n 大家對第 i 道菜的評價值為 ai 1 i n 有 m 位顧客,第 i 位顧客的期望值為 bi,而他的偏好值為 xi 因此,第 i 位顧客認為第 j 道菜的美味度為 bi xor aj xi xor 表示異或運算。第 i 位顧客希望從這些菜中挑出他認為最美味的菜,...