[SDOI2011]消防(樹的直徑+二分||單調隊列)
阿新 • • 發佈:2019-03-03
個數 要求 大量 應該 輸入輸出格式 正整數 app article 端點
輸入樣例#2: 復制
題目描述
某個國家有n個城市,這n個城市中任意兩個都連通且有唯一一條路徑,每條連通兩個城市的道路的長度為zi(zi<=1000)。
這個國家的人對火焰有超越宇宙的熱情,所以這個國家最興旺的行業是消防業。由於政府對國民的熱情忍無可忍(大量的消防經費開銷)可是卻又無可奈何(總統競選的國民支持率),所以只能想盡方法提高消防能力。
現在這個國家的經費足以在一條邊長度和不超過s的路徑(兩端都是城市)上建立消防樞紐,為了盡量提高樞紐的利用率,要求其他所有城市到這條路徑的距離的最大值最小。
你受命監管這個項目,你當然需要知道應該把樞紐建立在什麽位置上。
輸入輸出格式
輸入格式:
輸入包含n行:
第1行,兩個正整數n和s,中間用一個空格隔開。其中n為城市的個數,s為路徑長度的上界。設結點編號以此為1,2,……,n。
從第2行到第n行,每行給出3個用空格隔開的正整數,依次表示每一條邊的兩個端點編號和長度。例如,“2 4 7”表示連接結點2與4的邊的長度為7。
輸出格式:
輸出包含一個非負整數,即所有城市到選擇的路徑的最大值,當然這個最大值必須是所有方案中最小的。
輸入輸出樣例
輸入樣例#1: 復制5 2 1 2 5 2 3 2 2 4 4 2 5 3輸出樣例#1: 復制
5
8 6 1 3 2 2 3 2 3 4 6 4 5 3 4 6 4 4 7 2 7 8 3輸出樣例#2: 復制
5
說明
【數據規模和約定】
對於20%的數據,n<=300。
對於50%的數據,n<=3000。
對於100%的數據,n<=300000,邊長小等於1000。
最重要的一點就是路徑一定全都在樹的直徑上,至於證明就自行百度吧嘿嘿:
確定直徑的兩個端點 l 和 r ,維護直徑上的每個點到達的最遠的點的距離(不包括直徑上的點),要麽二分最大值,吧兩個端點向裏縮
1
[SDOI2011]消防(樹的直徑+二分||單調隊列)