樹的直徑 藍橋杯大臣的旅費

2022-07-01 03:33:10 字數 933 閱讀 5230

藍橋杯大臣的旅費

樹的直徑理論:

首先從u dfs找到最遠點v ,然後從v開始,dfs找到的最遠點一定是樹的直徑

證明:如果u->v 和樹的直徑沒有公共點,則可以從樹的直徑終點到u引一條邊,樹直徑變長了,矛盾

假設交點為k,那麼k->v (或者就是v本身) 一定是樹直徑的一部分,(最優子結構)

這樣就證明了v一定在樹的直徑的端點處,(為什麼是端點,因為u->v是最遠的,一定是葉子節點)

**:

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;67

const

int maxn = 1e6 + 5;8

int n, max_dis = -1

, vis[maxn], start;

9 vectorg[maxn];

10 vectore[maxn];

1112

int cal(int

x)13

1819

void dfs(int u,int

sum)

2027

for(int i=0;ii)

2831}32

33int

main()

3446 dfs(0,0

);47

//任意取乙個點尋找最遠的結點start

48 max_dis=-1

;49 memset(vis,0,sizeof

(vis));

50 dfs(start,0);//

從start開始求解樹的直徑

51//

重置深蒐時使用的變數

52 cout53return0;

54 }

ok

樹的直徑 藍橋杯 大臣的旅費

問題描述 很久以前,t王國空前繁榮。為了更好地管理國家,王國修建了大量的快速路,用於連線首都和王國內的各大城市。為節省經費,t國的大臣們經過思考,制定了一套優秀的修建方案,使得任何乙個大城市都能從首都直接或者通過其他大城市間接到達。同時,如果不重複經過大城市,從首都到達每個大城市的方案都是唯一的。j...

藍橋杯 歷屆試題 大臣的旅費(樹的直徑)

歷屆試題 大臣的旅費 時間限制 1.0s 記憶體限制 256.0mb 問題描述 很久以前,t王國空前繁榮。為了更好地管理國家,王國修建了大量的快速路,用於連線首都和王國內的各大城市。為節省經費,t國的大臣們經過思考,制定了一套優秀的修建方案,使得任何乙個大城市都能從首都直接或者通過其他大城市間接到達...

藍橋杯 大臣的旅費(樹的最大直徑)

問題描述 很久以前,t王國空前繁榮。為了更好地管理國家,王國修建了大量的快速路,用於連線首都和王國內的各大城市。為節省經費,t國的大臣們經過思考,制定了一套優秀的修建方案,使得任何乙個大城市都能從首都直接或者通過其他大城市間接到達。同時,如果不重複經過大城市,從首都到達每個大城市的方案都是唯一的。j...