bzoj1063 NOI2008 道路設計

2021-07-14 10:18:20 字數 2584 閱讀 6406

time limit: 20 sec memory limit: 162 mb

submit: 931 solved: 509

[submit][status][discuss]

description

z國坐落於遙遠而又神奇的東方半島上,在小z的統治時代公路成為這裡主要的交通手段。z國共有n座城市,一

些城市之間由雙向的公路所連線。非常神奇的是z國的每個城市所處的經度都不相同,並且最多隻和乙個位於它東

邊的城市直接通過公路相連。z國的首都是z國政治經濟文化旅遊的中心,每天都有成千上萬的人從z國的其他城市

湧向首都。為了使z國的交通更加便利順暢,小z決定在z國的公路系統中確定若干條規劃路線,將其中的公路全部

改建為鐵路。我們定義每條規劃路線為乙個長度大於1的城市序列,每個城市在該序列中最多出現一次,序列中相

鄰的城市之間由公路直接相連(待改建為鐵路)。並且,每個城市最多只能出現在一條規劃路線中,也就是說,任意

兩條規劃路線不能有公共部分。當然在一般情況下是不可能將所有的公路修建為鐵路的,因此從有些城市出發去往

首都依然需要通過乘坐長途汽車,而長途汽車只往返於公路連線的相鄰的城市之間,因此從某個城市出發可能需要

不斷地換乘長途汽車和火車才能到達首都。我們定義乙個城市的「不便利值」為從它出發到首都需要乘坐的長途汽

車的次數,而z國的交通系統的「不便利值」為所有城市的不便利值的最大值,很明顯首都的「不便利值」為0。小

z想知道如何確定規劃路線修建鐵路使得z國的交通系統的「不便利值」最小,以及有多少種不同的規劃路線的選擇

方案使得「不便利值」達到最小。當然方案總數可能非常大,小z只關心這個天文數字modq後的值。注意:規劃路

線1-2-3和規劃路線3-2-1是等價的,即將一條規劃路線翻轉依然認為是等價的。兩個方案不同當且僅當其中乙個方

案中存在一條規劃路線不屬於另乙個方案。

input

第一行包含三個正整數n、m、q,其中n表示城市個數,m表示公路總數,n個城市從1~n編號,其中編號為1的是首都

。q表示上文提到的設計路線的方法總數的模數。接下來m行,每行兩個不同的正數ai、bi(1≤ai,bi≤n)表示有一條

公路連線城市ai和城市bi。輸入資料保證一條公路只出現一次。

output

包含兩行。第一行為乙個整數,表示最小的「不便利值」。第二行為乙個整數,表示使「不便利值」達到最小時

不同的設計路線的方法總數modq的值。如果某個城市無法到達首都,則輸出兩行-1。

sample input

5 4 100

1 24 5

1 34 1

sample output

1

10

hint

以下樣例中是10種設計路線的方法:

(1)4-5

(2)1-4-5

(3)4-5,1-2

(4)4-5,1-3

(5)4-5,2-1-3

(6)2-1-4-5

(7)3-1-4-5

(8)1-4

(9)2-1-4

(10)3-1-4

【資料規模和約定】

對於100%的資料,滿足1≤n,m≤100000,1≤q≤120000000。
最多隻和乙個位於它東邊的城市相連,說明這是乙個樹。

那答案的最大值不會超過樹的深度。但其實這個最大值會很小。

因為每次減小的時候我們肯定都是要找乙個長的鏈減小,然後從剩下的短的鏈裡也繼續這樣做。這個過程其實就相當於在樹鏈剖分,我們知道樹鏈剖分的上界是lo

gn的,所以答案也是lo

gn級別的。

這樣的話設f[

i][j

][3]

表示i 這個點的答案為

j時,有0,

1 或

2 個子樹和根相連時的方案數。

做到每乙個兒子的時候更新一下當前的根的答案就行了。

複雜度:nl

ogn

#include

#include

#include

using namespace std;

#define ll long long

const int n=100010;

ll f[n][20][3];

struct saa[n<<1];

int n,m,mod,tot,point[n],next[n<<1];

inline int in()

inline void add(int

x,int

y)inline ll calc(ll x)

inline void dp(int

x,int

last)

}}int main()

for(i=1;i<=m;++i)

dp(1,0);

for(i=0;i<20;++i)

if(f[1][i][0]+f[1][i][1]+f[1][i][2]>0)

printf("-1\n-1\n");

}

bzoj1063 Noi2008 道路設計

樹形dp。這道題的劃分方式和樹鏈剖分類似,但是重路徑能經過根節點,而且要求方案數,所以不能用樹鏈剖分。但是由這種關係可以知道答案很小為log n級別 翻看資料後,確認了答案最大為4。但應該有能使答案更大的資料 用f i j 0 1 2 分別表示,以i為子樹的節點中,不便利值最大的點不便利值為j。0代...

BZOJ1063 NOI2008 道路設計

傳送門 sol 這東西怎麼長了一臉樹鏈剖分的樣子 把公路視為輕邊 發現輕邊的數量是log級別的?dp i j k 表示在節點i,答案為j,這個點向下連 0,1,2 條邊的方案數 直接轉移即可 include using namespace std long long dp 100005 20 4 p...

bzoj1063 Noi2008 道路設計

z國坐落於遙遠而又神奇的東方半島上,在小z的統治時代公路成為這裡主要的交通手段。z國共有n座城市,一些城市之間由雙向的公路所連線。非常神奇的是z國的每個城市所處的經度都不相同,並且最多隻和乙個位於它東邊的城市直接通過公路相連。z國的首都是z國政治經濟文化旅遊的中心,每天都有成千上萬的人從z國的其他城...