牛客練習賽24 D 插排樹(最短路練習)

2021-08-23 12:21:58 字數 1426 閱讀 9399

插排樹時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

64bit io format: %lld

一年一度的山東省oi夏令營又開始了,每到這個季節,山東的oier們都會歡聚這裡,一起學(tuí)習(feì)。當然,為了能更加愉快地學(tuí)習(feì),就少不了要自帶電腦,用電便開始成了一種問題,於是便有一種神奇的資料結構誕生了!這就是山東省oi專用資料結構——插排樹(如圖)

小k為了能更好的學(tuí)習(feì),所以他想盡量的往後做,所以現在請你幫幫他,他最遠可以離講台多遠。

已知插排樹的根節點在講台上,有且僅有乙個根節點(根節點入度為0),最遠距離即所有插排的長度,小k電腦線的長度忽略不計

第一行乙個整數n表示有n個節點

然後n-1行,每行三個整數a,b,c,表示插排a是接在插排b上的,插排a的長度為c

乙個整數n表示最遠距離
示例1

複製

9

2 1 2

3 1 2

4 1 1

5 2 3

6 2 1

7 3 1

8 3 4

9 7 5

複製

8
1=>3=>7=>9
對於30%的資料 n<233

對於70%的資料 n<2333

對於100%的資料 n<50000

c小於20

a,b小於等於n

最長路**如下

#include #include #include #include #include #include #define maxn 500005

typedef long long ll;

using namespace std;

ll n,m,k,cnt;

ll head[maxn];

ll rec[maxn],ma;

ll flag[maxn] = ;

struct edge

plan[maxn];

struct node

bool operator < (const node nod) const

};void bulid(ll b,ll a,ll c)

void bfs(ll be)}}

}setkb;

int main()

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

bfs(*kb.begin());

cout << ma << endl;

return 0;

}

牛客練習賽24 D

名字挺有意思的,排插樹,雖然這是個圖。算dijkstra的模版題,求最短路裡面最長的那條,因為到講台的距離總是取決於最短的那條路,但是又要求離講台最遠,那麼我們通過dijkstra計算出起始點到所有點的最短路然後遍歷找最大值就好。如下 include using namespace std type...

牛客練習賽24 E 青蛙(最短路)

有乙隻可愛的老青蛙,在路的另一端發現了乙個黑的東西,想過去一 竟。於是便開始踏上了旅途 一直這個小路上有很多的隧道,從隧道的a進入,會從b出來,但是隧道不可以反向走。這只青蛙因為太老了,所以很懶,現在想請你幫幫慢,問他最少需要幾步才可以到達對面。將小徑看作一條數軸,青蛙初始在0上,這只青蛙可以向前跳...

牛客練習賽17 A E 最短路 列舉

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 題目描述 給出共享長方體乙個頂點的三個面的面積,求它十二條邊的邊長和。輸入描述 一行三個整數a,b,c表示面積 1 a,b,c 10000 輸出描述 一行乙個整數表示邊...