一本通1581旅遊規劃

2022-05-08 02:00:14 字數 2415 閱讀 6496

時間限制: 1000 ms         記憶體限制: 524288 kb

描述w市的交通規劃出現了重大問題,市**下決心在全市的各大交通路口安排交通疏導員來疏導密集的車流。但由於人員不足,w市市長決定只在最需要安排人員的路口安放人員。具體說來,w市的交通網路十分簡單,它包括n個交叉路口和n-1條街道,任意一條街道連線兩個交叉路口,並且任意兩個交叉路口之間都存在一條路徑互相連線。經過長期調查結果顯示如果乙個交叉路口位於w市交通網的最長路徑上,那麼這個路口必然擁擠不堪,所謂最長路徑定義為某條路徑p=(v1,v2,v3…vk),路徑經過的路口各不相同且城市中不存在長度》k的路徑(因此可能存在著不唯一的最長路徑)。因此w市市長希望知道有哪些路口位於城市交通網的最長路徑之上。

格式輸入格式

第一行包括乙個整數n。

之後的n-1行每行包括兩個整數u, v表示編號為u和v的路口之間存在著一條街道(注意:路口被依次編號為0到n-1)

輸出格式

輸出包括若干行,每行包括乙個整數——某個位於最長路上路口的編號。

為了確保解唯一,我們規定位於所有最長路上的路口按編號順序從小到大輸出。

樣例1樣例輸入1

100 1

0 20 4

0 60 7

1 32 5

4 86 9

樣例輸出101

2345

689提示

這裡存在著若干條最長路徑,其中的兩條是3-1-0-2-5與8-4-0-6-9,他們的長度都是5,但是不存在長度》5的路徑且所有最長路徑都不包括路口7,所以答案中沒有7。

資料範圍:

對於50%的資料保證n<=1000

對於100%的資料保證n<=200000

先附上手繪的樣例圖(過於醜陋) 

sol:一開始想求出直徑的兩個端點然後差分搞一下,然後發現非常wei,然後就想到如果一點在直徑上,那麼他不是只有兩個方向延伸嗎?(向兒子,或者向上爬幾步爬到根或者爬到別的子樹裡去);所以兩遍dfs就可以求出兩個方向的最長值,還有注意下因為up[x]=max(up[fa]+1,down[fa]+1),但是如果down[fa]最大值就是x轉移過來的話,要用down[fa]的次大值來轉移,所以down要記錄zd和cd

#include using

namespace

std;

inline

intread()

while

(isdigit(ch))

return (f)?(-s):(s);

}#define r(x) x=read()inline

void write(int

x)

if(x<10

)

write(x/10

); putchar((x%10)+'0'

);

return;}

inline

void writeln(int

x)#define w(x) write(x),putchar(' ')

#define wl(x) writeln(x)

const

int n=200005,m=400005

;int

n;struct

tree

intdown_zd[n],from_zd[n],down_cd[n],from_cd[n];

inline

void dfs_down(int x,int

fa)

else

if(down_zd[to[i]]+1>down_cd[x])

}return

; }

intup[n];

inline

void dfs_up(int x,int

fa)

inti;

for(i=head[x];i;i=next[i]) if(to[i]!=fa)

return

; }

inline

void

output()

return

; }

inline

void

init()

}t;int

main()

t.dfs_down(

1,0);

t.dfs_up(

1,0);

t.output();

return0;

}/*input

100 1

0 20 4

0 60 7

1 32 5

4 86 9

output01

2345

6789

*/

view code

題解 1581 旅遊規劃

description 給出一棵樹,求樹上位於最長路徑上的點,即位於與直徑長度相同的路徑上的所有點 sample input 10 0 10 2 0 40 6 0 71 3 2 54 8 6 9 sample output 012 3456 89 solution 震驚一本通上居然有這麼好的題,這題...

佇列(一本通)

這道題重點是關係的轉換和初始化 include include include includeusing namespace std int a 101 記錄接著的的那個節點 int n,m int main int ans void bfs int x,int y int main cout in...

情感修煉一本通

實踐準則 經驗親密關係構成要素 了解 關心 相互依賴性 相互一致性 信任以及承諾 親密的伴侶彼此間有著廣泛而私密的了解。他們熟知彼此的經歷 愛好 情感和心願,而且一般不會把這些資訊透露給其他人。親密的伴侶關心對方,彼此能從對方身上感受到更多的關愛。如果人們認為自己的伴侶了解 理解並欣賞自己,其親密程...