BZOJ1297 SCOI2009 迷路 題解

2022-05-16 14:25:05 字數 1013 閱讀 3810

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 行...