HDU 4607 Park Visit(樹的直徑)

2021-07-10 04:42:44 字數 1239 閱讀 4090

題意:

給定

n≤105

的一棵無

向樹,m

≤105次

詢問從任

意起點出

發經過k

≤n個不

同節點的

最短路徑

分析:

可以

發現直徑

上的當然

是走1次

比較好,

其他的走

2次,因

為直徑最

長 然後

就是裸題

**:

//

// created by taosama on 2016-02-25

//#pragma comment(linker, "/stack:1024000000,1024000000")

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define pr(x) cout << #x << " = " << x << " "

#define prln(x) cout << #x << " = " << x << endl

const

int n = 1e5 + 10, inf = 0x3f3f3f3f, mod = 1e9 + 7;

int n, q;

vector

g[n];

pair diameter;

void dfs(int u, int f, int d) );

for(int v : g[u])

}int main()

diameter = ;

dfs(1, -1, 1);

dfs(diameter.second, -1, 1);

int d = diameter.first;

while(q--)

}return

0;}

HDU4607 樹的直徑

樹的直徑的求法,任取一點u為起點,bfs出一條最長路徑,假設此時終點為v,則再次以v為起點,再bfs出一條最長路徑v w。可以得出樹的直徑即為所求。證明略。可以直接bfs或者dfs都行,來發水題 author crazy 石頭 data structure 樹的直徑 created time 201...

樹的直徑 hdu 4607

樹的直徑定義 樹中所有最短路徑的最大值。定義distance a,b 為頂點a與b之間的最短距離。用數學語言表示就是 對於一棵樹 t v,e 彐vx,vy v,v1,v2 v,都有distance v1,v2 distance vx,vy 則把vx到vy的最短路徑稱為樹t的直徑。現在我們來用演算法求...

hdu 4607 求樹的直徑

分析後就是求樹的直徑兩次bfs即可 證明 樹的直徑是指樹的最長簡單路。求法 兩遍bfs 先任選乙個起點bfs找到最長路的終點,再從終點進行bfs,則第二次bfs找到的最長路即為樹的直徑 原理 設起點為u,第一次bfs找到的終點v一定是樹的直徑的乙個端點 證明 1 如果u 是直徑上的點,則v顯然是直徑...