沼澤鱷魚 討論題)

2021-09-18 07:15:09 字數 2416 閱讀 4874

潘塔納爾沼澤地號稱世界上最大的一塊濕地,它地位於巴西中部馬托格羅索州的南部地區。每當雨季來臨,這裡碧波蕩漾、生機盎然,引來不少遊客。為了讓遊玩更有情趣,人們在池塘的**建設了幾座石墩和石橋,每座石橋連線著兩座石墩,且每兩座石墩之間至多只有一座石橋。這個景點造好之後一直沒敢對外開放,原因是池塘裡有不少危險的食人魚。豆豆先生酷愛冒險,他一聽說這個訊息,立馬趕到了池塘,想做第乙個在橋上旅遊的人。雖說豆豆愛冒險,但也不敢拿自己的性命開玩笑,於是他開始了仔細的實地勘察,並得到了一些驚人的結論:食人魚的行進路線有週期性,這個週期只可能是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 22 1

1 00 5

5 11 4

4 33 5

13 0 5 1

2
此題一看就是經典題目8上面的圖上做矩陣加速,但是這裡有乙個問題,就是在某個時刻,某些點是不能走的。

且分析得,它們的週期很小,是常數級別,於是xyx(我也是聽了他的思想才知道怎麼寫的,真的很厲害!!)就想出了我們可以把乙個週期中每乙個時間點的圖給建出來,這樣我們可以得到具體的矩陣,如果我們以12為乙個週期,這樣最後把每個矩陣乘起來的積乘k/12次方,再加上前k%12時間的矩陣的積就是答案。

自己都覺得自己講解得很模糊,但是他也是給我這樣講的~~

其實仔細想想就可以知道是什麼意思了

然後,關鍵點 :建邊

坑點:這是乙個無向圖(結果自己樣例一直過不了)

也沒什麼很重要的

#include #include #include #include using namespace std;

const int mod = 10000;

int m , n , fn;

int x , y , s , l , t;

int fis[23][5];

struct node}}

return r;

}}b;node a[14] , sum;

node qpow( node a , int b )

return t;

}int main()

scanf( "%d" , &fn );

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

}sum.n = sum.m = n;

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

sum.s[i][i] = 1;

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

sum = sum * a[i];

}node ans = qpow( sum , t / 12 );

for( int i = 1 ; i <= t % 12 ; i ++ )

ans = ans * a[i];

printf( "%d" , ans.s[s][l] );

return 0;

}

SSL2511沼澤鱷魚

潘塔納爾沼澤地號稱世界上最大的一塊濕地,它地位於巴西中部馬托格羅索州的南部地區。每當雨季來臨,這裡碧波蕩漾 生機盎然,引來不少遊客。為了讓遊玩更有情趣,人們在池塘的 建設了幾座石墩和石橋,每座石橋連線著兩座石墩,且每兩座石墩之間至多只有一座石橋。這個景點造好之後一直沒敢對外開放,原因是池塘裡有不少危...

ZJOI2004 沼澤鱷魚

給定乙個無向圖,以及起點s和終點t。每單位時間可以從乙個點走向聯通的另乙個點,問從起點s出發,經過k單位時間到達終點t的方案總數。最多50個點,k小於等於10 9。另 某一週期 週期時間為2,3或4 內一些點不能走到。到達某一點的方案總數,需要想到由加法原理進行遞推。記f u,k 為k秒後到達u點的...

BZOJ 1898 Swamp 沼澤鱷魚

思路 因為是中文題,題意就不過多描述了。食人魚的活動週期分別是2 3或4,這樣可以考慮所有的食人魚的活動情況一定是最小以12為週期的,這樣我們就構造12個矩陣,a i m x y 每個矩陣表示在第 i 時刻,從第 x 個石墩到第 y 個石墩能不能走,這樣將這十二個矩陣相乘,得到第十三個矩陣a 0 對...