洛谷P3758 TJOI2017 可樂

2022-08-13 23:36:19 字數 1257 閱讀 8050

加里敦星球的人們特別喜歡喝可樂。因而,他們的敵對星球研發出了乙個可樂機械人,並且放在了加里敦星球的1號城市上。這個可樂機械人有三種行為: 停在原地,去下乙個相鄰的城市,自爆。它每一秒都會隨機觸發一種行為。現 在給加里敦星球城市圖,在第0秒時可樂機械人在1號城市,問經過了t秒,可樂機械人的行為方案數是多少?

輸入格式####

第一行輸入兩個正整數況n,m,n表示城市個數,m表示道路個數。(1 <= n <=30,0 < m < 100)

接下來m行輸入u,v,表示u,v之間有一條道路。(1<=u,v <= n)保證兩座城市之間只有一條路相連。

最後輸入入時間t

輸出格式####

輸出可樂機械人的行為方案數,答案可能很大,請輸出對2017取模後的結果。

輸入樣例#1####

3 21 2

2 32

輸出樣例#1####【樣例解釋】

1 ->**

1 -> 1 ->**

1 -> 2 ->**

1 -> 1 -> 1

1 -> 1 -> 2

1 -> 2 -> 1

1 -> 2 -> 2

1 -> 2 -> 3

【資料範圍】

對於20%的pn,有1 < t ≤ 1000

對於100%的pn,有1 < t ≤ 10^6。

很顯然的dp

n這麼小,可以矩陣加速

進行快速冪的矩陣共n+1列,前n列為某個點與其他點的連線情況,最後一列全是1,計算某一秒自爆的方案數

#include#include#include#include#define p 2017

using namespace std;

const int n = 35;

struct matrix

return ret;

}int main()

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

map.a[i][n+1]=1;

scanf("%d",&t);

matrix a;

memset(a.a,0,sizeof(a.a));

a.a[1][1]=1;

a=a*pow_mod(map,t);

int ans=0;

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

ans=(ans+a.a[1][i])%p;

printf("%d\n",ans);

return 0;

}

題解 P3758 TJOI2017 可樂

題目鏈結 樹形 dp 多半是跑不過去的,可用矩陣快速冪解決 題目大意 給定乙個無向圖,0 秒時機械人在 1 號點,每秒可以走到另乙個相鄰的點或者不動或者自爆,求 t 秒內行動方案數 矩陣快速冪 分析 首先把問題統一,不動我們連自環即可,自爆可以連單向邊到虛擬點,虛擬點連自環,然後問題就變成了 t 秒...

洛谷P3761 TJOI2017 城市

從加里敦大學城市規劃專業畢業的小明來到了乙個地區城市規劃局工作。這個地區一共有ri座城市,1條高速公路,保證了任意兩運城市之間都可以通過高速公路相互可達,但是通過一條高速公路需要收取一定的交通費用。小明對這個地區深入研究後,覺得這個地區的交通費用太貴。小明想徹底改造這個地區,但是由於上司給他的資源有...

洛谷3761,TJOI2017城市

這道題一開始在想可以列舉每個點對,嘗試刪除其間的邊,因為有o n2 個點對,所以要o 1 更新答案 後來發現,因為是樹,所以只有o n 個點對是有用的 這麼顯然的結論一開始沒發現,看來還是我太弱了 然後就可以每次o n 判斷 首先定義在一棵樹 x 中,對於點y,f x,y 等於以 y 為根的有根樹,...