bzoj1063 Noi2008 道路設計

2022-10-10 12:48:09 字數 1603 閱讀 2584

z國坐落於遙遠而又神奇的東方半島上,在小z的統治時代公路成為這裡主要的交通手段。z國共有n座城市,一些城市之間由雙向的公路所連線。非常神奇的是z國的每個城市所處的經度都不相同,並且最多隻和乙個位於它東邊的城市直接通過公路相連。z國的首都是z國政治經濟文化旅遊的中心,每天都有成千上萬的人從z國的其他城市湧向首都。為了使z國的交通更加便利順暢,小z決定在z國的公路系統中確定若干條規劃路線,將其中的公路全部改建為鐵路。我們定義每條規劃路線為乙個長度大於1的城市序列,每個城市在該序列中最多出現一次,序列中相鄰的城市之間由公路直接相連(待改建為鐵路)。並且,每個城市最多只能出現在一條規劃路線中,也就是說,任意兩條規劃路線不能有公共部分。當然在一般情況下是不可能將所有的公路修建為鐵路的,因此從有些城市出發去往首都依然需要通過乘坐長途汽車,而長途汽車只往返於公路連線的相鄰的城市之間,因此從某個城市出發可能需要不斷地換乘長途汽車和火車才能到達首都。我們定義乙個城市的「不便利值」為從它出發到首都需要乘坐的長途汽車的次數,而z國的交通系統的「不便利值」為所有城市的不便利值的最大值,很明顯首都的「不便利值」為0。小z想知道如何確定規劃路線修建鐵路使得z國的交通系統的「不便利值」最小,以及有多少種不同的規劃路線的選擇方案使得「不便利值」達到最小。當然方案總數可能非常大,小z只關心這個天文數字modq後的值。注意:規劃路線1-2-3和規劃路線3-2-1是等價的,即將一條規劃路線翻轉依然認為是等價的。兩個方案不同當且僅當其中乙個方案中存在一條規劃路線不屬於另乙個方案。

n<=100000 q<=120000000

第一問是樹形dp,f[i][0/1/2]表示第i個點,向下建了0/1/2條道路的最長的長度的最小值。

可以用樹剖證明答案是log級的。

這樣就直接計算方案數就行了 g[i][0/1/2][k]表示第i個點向下建了0/1/2條道路,最長的路的長度是k的方案數

複雜度nlog^2n

#include#include

#define mn 100000

using

namespace

std;

inline

intread()

while(ch >= '

0' && ch <= '9')

return x *f;

}int n,m,mod,head[mn+5],cnt=0,g[mn+5],g[mn+5],f[3][65][mn+5],f[3][65][mn+5

];struct edgee[mn*2+5

];inline

void ins(int f,int

t);head[f]=cnt;

e[++cnt]=(edge);head[t]=cnt;

}void pre(int x,int

fa) g[x]=min(g[x],g[x]);

}inline

void r(int&x,int y)

void dp(int x,int

fa)

for(int j=0;j<=2;++j)

for(int k=0;k<=m;++k)

f[j][k][x]=f[j][k][x],f[j][k][x]=0

; }

}int

main()

bzoj1063 NOI2008 道路設計

time limit 20 sec memory limit 162 mb submit 931 solved 509 submit status discuss description z國坐落於遙遠而又神奇的東方半島上,在小z的統治時代公路成為這裡主要的交通手段。z國共有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...