矩陣加速 道路千萬條

2022-09-18 03:57:42 字數 1382 閱讀 6869

道路千萬條,安全第一條!hf校區到yb校區有很多種走法,我們可以把走法看成n個節點的有向圖,假設hf代表0號節點,yb代表n-1號節點,gm想從0號節點出發,到n-1號節點,但必須恰好在t時刻到達!你能告訴gm一共有多少種走法嗎?注意:gm不能在某個節點逗留,且通過某有向邊時嚴格為給定時間(邊權)。

輸入

滿足 2 <= n <= 10 ; 1 <= t <= 1000000000。

輸出

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

樣例輸入

2 211

00樣例輸出

1首先想乙個簡單的情況,如果只是有0,1所組成的矩陣我們該如何求呢

例如這裡有乙個性質,也就是這乙個矩陣的t次冪所在的s[i][j]正是從i到j的時間為t的路徑數。

震驚吧,我也很震驚...

仔細想一想其實也確實是這樣。

我們先看2次方

(1,1)就是意義為1到1中途經過1的情況,就相當於走了2(時間)。而(1,2)則是1到2中途經過2的情況,這樣推下去確實也沒有問題,因為(i,j)為1則就說明了i,j有路。

其實我們回到矩陣乘法的基本定義

其實也就這麼做出來。

但這道題又不是由0,1構成,我們就需要拆點。

例如我們就拆成了

我們就是將每乙個點拆成它的最大邊權個(這樣才能構造出全部為1,0)

拆點過程呢...看**吧,我覺得自己想一下還是可以理解的。(模板**好)

#include#include#include#include#include#include#includeusing namespace std;

struct matrix

matrix operator * (const matrix &x)const

}a,b;

int n,t;

long long maxn;

int xb(int x,int y)

matrix qkpow(matrix x,int y)

return ans;

}int main()

for (int i = 1;i <= n;i ++)

}b.n = b.m = maxn * n;

b = qkpow(b,t);

printf("%lld\n",b.c[1][(n - 1) * maxn + 1]);

}

廣搜**

深搜**

(搜尋真好用)

Oracle千萬條記錄的測試

客戶 訂單 訂單項 插入資料的儲存過程如下 create or replace procedure createusers is v sequ user number 19 v sequ order number 19 begin for v count in 1.1000000 loop inse...

千萬條記錄分頁查詢優化

分頁查詢是最常用的場景之一,但通常也是最容易出問題的地方。比如對於下面簡單的語句,一般 dba 想到的辦法是在 type,name,create time 欄位上加組合索引。這樣條件排序都能有效的利用到索引,效能迅速提公升。select from tstb logwhere type sqlstat...

介貸網 貸款道路千萬條,正規謹慎第一條!

近年來,網貸 二字出現在人們生活中,逐漸影響著大多數年輕人的生活,成為大家喜聞樂見的一種消費方式。據網貸天眼的資料顯示 排名前十的網貸平台有陸金服人人貸 宜人貸 玖程式設計客棧富普惠 微貸網 拍拍貸 麻袋財富 小贏網金 桔子理財 51 人品。雖然網貸天眼做出了排名,但是也無法斷定網貸平台是否正規可靠...