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國的其他城...