NEFU 1301 樹的直徑 bfs

2021-08-14 20:07:05 字數 1138 閱讀 6886

problem:1301

time limit:1000ms

memory limit:65535k

樹的直徑是指樹的最長簡單路。我們通常通過兩遍bfs or dfs得到。即先任選乙個起點bfs or dfs找到最長路的終點,再從終點進行bfs or dfs,則第二次找到的最長路即為樹的直徑。現給出一棵樹,求樹的直徑。

第一行輸入乙個整數 t( t <= 10 ) ,代表樣例的個數。

對於每組樣例

第一行輸入樹的頂點數 n (1<=n<=1e5)

接下來 n - 1 行,每行包含兩個數 x y ,代表頂點 x 和 y 之間有一條邊(x,y <= n)

乙個整數,樹的直徑的長度

2

91 2

1 32 4

2 53 6

6 86 7

8 99

1 21 3

2 42 5

3 63 7

6 86 9

7

6

題意:中文題。

思路:用兩次bfs來遍歷樹,第二次得到的就是樹長度最大的。也就是樹的直徑。

**:

#include #include #include #include #include using namespace std;

const int inf=0x3f3f3f3f;

int maxi;

int maxn;

struct node

q[100005];

int d[100005];

void bfs(int now)

que.push(q[u].next[i]);}}

}int main()

memset(d,inf,sizeof(d));

maxn=0;

d[1]=0;

bfs(1);

maxn=0;

memset(d,inf,sizeof(d));

d[maxi]=0;

bfs(maxi);

printf("%d\n",maxn+1);

}return 0;

}

樹的直徑(兩個bfs)

樹的直徑 樹中的最長鏈 具體思路 隨便找乙個點bfs,然後找到最長的鏈,然後再以找到的點作為起點進行bfs,然後找到的最長的鏈就是樹的直徑。ac include include include include include include include include include inclu...

樹的直徑(兩個bfs)

樹的直徑 樹中的最長鏈 具體思路 隨便找乙個點bfs,然後找到最長的鏈,然後再以找到的點作為起點進行bfs,然後找到的最長的鏈就是樹的直徑。ac include include include include include include include include include inclu...

兩次BFS求樹的直徑 演算法導論22 2 7

以任意點w開始,先做一次bfs,找到最遠的點v,然後再以此點v進行一次bfs,找到最遠的點為u,u到v就是樹的直徑。此問題的關鍵不是在程式設計,而是要證明,網上也找了很多資料,沒有看到證明,以下是個人的證明方法。首先要知道樹是沒有環路的連通圖,任意兩點都有一條通路,而且也只有一條通路。同時假設樹的一...