windy在有向圖中迷路了。 該有向圖有 n 個節點,windy從節點 0 出發,他必須恰好在t 時刻到達節點 n-1。 現在給出該有向圖,你能告訴windy總共有多少種不同的路徑嗎? 注意:windy不能在某個節點逗留,且通過某有向邊的時間嚴格為給定的時間。
思考當邊權為1時,a[i][j]=1可以表示為i到j時間為t=1的方案數為1。
那麼顯然我們可以求出t=2的a[i][j]=sigma(a[i][k]*a[k][j])。
以此類推求出t時間的a[i][j]……等等,這不顯然是矩陣乘法快速冪嗎?
那麼考慮邊權不為1的情況:我們把點拆開強行讓他們變成1不就可以了嗎。
矩陣自乘t次後答案就是a[0][n-1]。
#include#include#include
#include
#include
using
namespace
std;
const
int n=100
;const
int p=2009
;char
s[n];
intm;
struct
node;
void buildi(node &a)
}}void multi(node x,node y,node &z)}}
}return;}
node a,b;
void qpow(int
k)
return;}
int solve(int k,int
n)int
t,n;
inline
int tp(int i,int j)
intmain()
}for(int i=1;i<=n;i++)
}printf(
"%d\n
",solve(t,n));
return0;
}
題解 bzoj1297 SCOI2009 迷路
windy在有向圖中迷路了。該有向圖有 n 個節點,windy從節點 0 出發,他必須恰好在 t 時刻到達節點 n 1。現在給出該有向圖,你能告訴windy總共有多少種不同的路徑嗎?注意 windy不能在某個節點逗留,且通過某有向邊的時間嚴格為給定的時間。第一行包含兩個整數,n t。接下來有 n 行...
B1297 SCOI2009 迷路 矩陣
這個題我覺得很有必要寫一篇部落格。首先,我們需要知道,假如乙個鄰接矩陣只有0 1構成,那麼它自己的n次方就是走n步之後的方案數。但這個題還有2 9咋辦呢。我們觀察發現,這個題只有10個點,而且邊權 9我們可以想到拆點這個小操作。把每個點拆成9個點,點內連1的邊,點外分別連到相應的權值就行了。題幹 w...
1297 SCOI2009 迷路 矩陣乘法
windy在有向圖中迷路了。該有向圖有 n 個節點,windy從節點 0 出發,他必須恰好在 t 時刻到達節點 n 1。現在給出該有向圖,你能告訴windy總共有多少種不同的路徑嗎?注意 windy不能在某個節點逗留,且通過某有向邊的時間嚴格為給定的時間。第一行包含兩個整數,n t。接下來有 n 行...