藍橋杯大臣的旅費
樹的直徑理論:
首先從u dfs找到最遠點v ,然後從v開始,dfs找到的最遠點一定是樹的直徑
證明:如果u->v 和樹的直徑沒有公共點,則可以從樹的直徑終點到u引一條邊,樹直徑變長了,矛盾
假設交點為k,那麼k->v (或者就是v本身) 一定是樹直徑的一部分,(最優子結構)
這樣就證明了v一定在樹的直徑的端點處,(為什麼是端點,因為u->v是最遠的,一定是葉子節點)
**:
1 #include 2 #include 3 #include 4 #include 5using
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...