日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

沼泽鳄鱼_SSL2511_矩阵乘法

發布時間:2025/4/14 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 沼泽鳄鱼_SSL2511_矩阵乘法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

沼澤鱷魚

【題目描述】

潘塔納爾沼澤地號稱世界上最大的一塊濕地,它地位于巴西中部馬托格羅索州的南部地區。每當雨季來臨,這里碧波蕩漾、生機盎然,引來不少游客。

為了讓游玩更有情趣,人們在池塘的中央建設了幾座石墩和石橋,每座石橋連接著兩座石墩,且每兩座石墩之間至多只有一座石橋。這個景點造好之后一直沒敢對外開放,原因是池塘里有不少危險的食人魚(不是說鱷魚咩~_~)。

豆豆先生酷愛冒險,他一聽說這個消息,立馬趕到了池塘,想做第一個在橋上旅游的人。雖說豆豆愛冒險,但也不敢拿自己的性命開玩笑,于是他開始了仔細的實地勘察,并得到了一些驚人的結論:食人魚的行進路線有周期性,這個周期只可能是2,3或者4個單位時間。每個單位時間里,食人魚可以從一個石墩游到另一個石墩。每到一個石墩,如果上面有人它就會實施攻擊,否則繼續它的周期運動。如果沒有到石墩,它是不會攻擊人的。

借助先進的儀器,豆豆很快就摸清了所有食人魚的運動規律,他要開始設計自己的行動路線了。每個單位時間里,他只可以沿著石橋從一個石墩走到另一個石墩,而不可以停在某座石墩上不動,因為站著不動還會有其它危險。如果豆豆和某條食人魚在同一時刻到達了某座石墩,就會遭到食人魚的襲擊,他當然不希望發生這樣的事情。

現在豆豆已經選好了兩座石墩Start和End,他想從Start出發,經過K個單位時間后恰好站在石墩End上。假設石墩可以重復經過(包括Start和End),他想請你幫忙算算,這樣的路線共有多少種(當然不能遭到食人魚的攻擊)。

?

【輸入文件】

輸入文件共M + 2 + NFish行。

第一行包含五個正整數N,M,Start,End和K,分別表示石墩數目、石橋數目、Start石墩和End石墩的編號和一條路線所需的單位時間。石墩用0到N–1的整數編號。

第2到M + 1行,給出石橋的相關信息。每行兩個整數x和y,0 ≤ x, y ≤N–1,表示這座石橋連接著編號為x和y的兩座石墩。

第M + 2行是一個整數NFish,表示食人魚的數目。

第M + 3到M + 2 + NFish行,每行給出一條食人魚的相關信息。每行的第一個整數是T,T = 2,3或4,表示食人魚的運動周期。接下來有T個數,表示一個周期內食人魚的行進路線。

? ? ? 如果T=2,接下來有2個數P0和P1,食人魚從P0到P1,從P1到P0,……;

? ? ? 如果T=3,接下來有3個數P0,P1和P2,食人魚從P0到P1,從P1到P2,從P2到P0,……;

? ? ? 如果T=4,接下來有4個數P0,P1,P2和P3,食人魚從P0到P1,從P1到P2,從P2到P3,從P3到P0,……。

豆豆出發的時候所有食人魚都在自己路線上的P0位置,請放心,這個位置不會是Start石墩。

?

【輸出文件】

輸出路線的種數,因為這個數可能很大,你只要輸出該數除以10000的余數就行了。

?

【約定】

???????1 ≤ N ≤50

???????1 ≤ K ≤2,000,000,000

???????1 ≤NFish ≤ 20

?

【樣例輸入】

6 8 1 5 3

0 2

2 1

1 0

0 5

5 1

1 4

4 3

3 5

1

3 0 5 1

?

【樣例輸出】

2

?

【樣例說明】

時刻

0

1

2

3

食人魚位置

0

5

1

0

路線一

1

2

0

5

路線二

1

4

3

5




【解題思路】

知識點:

圖鄰接矩陣上的乘法


圖的鄰接矩陣可以唯一地表示一張圖,并且有很多神奇的性質。

首先,我們來看一下最簡單的情況,一張N個點的無向無權圖。如果點a和點b連邊,那么鄰接矩陣G[a,b]=G[b,a]=1,否則都等于0。

考慮鄰接矩陣自乘,即G2=G*G(矩陣乘法)可以得出結論,G^k[a,b]就等同a到b經過k-1個中間點也就是長度為k的路徑條數。

那么對于有重邊的圖,我們只需要把G[a,b]改為表示點a、b之間重邊的條數即可。

而對于有向圖的自環不需要特殊考慮。

對于無向圖的自環,我們通常是把G[a,a]加上2,這樣在計算Gk的時候這條邊就被算成2條不同的邊,如果只加上1,又會不滿足矩陣里所有元素和等于邊數兩倍的性質。


考慮這個問題,假設沒有食人魚,那么這道題目就變成了上述所說的求由a到b長度為k的路徑條數,即求連接矩陣G^k[a,b]。


再考慮有食人魚的情況:

圖鄰接矩陣上的乘法有食人魚和沒有食人魚的區別就在于,前者的圖是不斷在變化,而后者的圖始終是不變的。

設Gi表示把與時刻i不能經過的點相關的邊都去掉以后的圖。相乘同樣可以得到最終時刻的答案矩陣Gk*Gk-1*Gk-2....*G1。

那么這樣就是最優解了嗎?

觀察題目數據范圍可以發現,2≤T≤4,2、3、4的最小公倍數為12,則最多沒12單位時間為一個周期,所以我們只用考慮12單位時間內的各連接矩陣即可。

但是注意到k不一定是12的倍數,所以k mod 12也就是最后未滿一個周期的時間,我們可以單獨相乘,前面周期計算采用快速冪,這樣間復雜度為O(N2logK)


【源代碼】/pas


typearr=array[0..101,0..101]of longint; constpp=10000;var a,b:array[0..101]of longint; n,m,s,e,q:longint; t,c,d:arr; g:array[0..12]of arr;procedure ch(u,v:arr); var j,k,l:longint; beginfillchar(c,sizeof(c),0);for j:=1 to n dofor k:=1 to n dofor l:=1 to n doc[j,k]:=(c[j,k]+(u[j,l]*v[l,k])mod pp)mod pp; end;procedure dfs(y:longint); beginif y<1 then exit;dfs(y div 2);ch(c,c);if y mod 2=1 thench(c,d); end;procedure init; var i,j,k:Longint; x,y,r,l:longint; beginreadln(n,m,s,e,q);for i:=1 to m dobeginreadln(x,y);t[x+1,y+1]:=1;t[y+1,x+1]:=1;end;for i:=1 to 12 do g[i]:=t;readln(r);for i:=1 to r dobeginread(l);for j:=1 to l doread(b[j]);for j:=1 to 12 dofor k:=1 to n dog[j,k,b[(j mod l)+1]+1]:=0;end; end;procedure main; var i,j:longint; beginfillchar(c,sizeof(c),0);for i:=1 to n do c[i,i]:=1;for i:=1 to 12 doch(c,g[i]);d:=c;fillchar(c,sizeof(c),0);for i:=1 to n do c[i,i]:=1;dfs(q div 12);for i:=1 to q mod 12 doch(c,g[i]); end; begininit;main;writeln(c[s+1,e+1]); end.


轉載于:https://www.cnblogs.com/olahiuj/p/5781346.html

總結

以上是生活随笔為你收集整理的沼泽鳄鱼_SSL2511_矩阵乘法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。