樹上最短路

2022-05-14 01:13:12 字數 1264 閱讀 4623

題目:

給出一棵樹進行如下操作:

(1)把某個點上染黑

(2)詢問某個點,到最近黑點的距離。

開始時,把『1』點染黑。

• 10% n,m ≤ 10

• 40% n,m ≤ 100

• 100% n ≤ 2 × 10 5 ,m ≤ 10 5

思路:(搜尋的思路)

每加入乙個點就更新,最短路。記錄答案。

乙個剪枝:

當你要更新的值大於或等於它原來的值時,就不用向後更新了。(因為後面的點肯定離另乙個點比這個點近)

具體**:

bfs

#include#include

#include

#include

#include

#include

using

namespace

std;

int n,m,q[99999999

];int h[200009],next[400009],to[400009],cnt,ans[200009

];void bfs(int

x) }

}}int

main()

memset(ans,

0x7f,sizeof

(ans));

bfs(1);

for(int i=1,a,b;i<=m;i++)

if(a==1

)

}return0;

}

dfs

#include#include

#include

#include

#include

#include

using

namespace

std;

intn,m;

int h[200009],next[400009],to[400009],cnt,ans[200009

],last;

void dfs(int x,int last,int

y)

return;}

intmain()

memset(ans,

0x7f,sizeof

(ans));

dfs(

1,1,0

);

for(int i=1,a,b;i<=m;i++)

if(a==1

)

}return0;

}

最短路 最短路徑問題

題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 共有n m 3行,其中 第一行為乙個整數n。第2行...

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...

最短路(最短路之積)

首先考慮暴力維護,顯然極端資料就會炸裂,那麼用什麼來維護呢?考慮乙個很 nb的公式log n m log n log m ok,這道題到此結束 我們只要把乘積轉化為對數,最後再還原就可以了,也不用考慮精度問題,本蒟蒻試著用pow,然後它死了。includeusing namespace std co...