Gym 101522B樹的直徑

2021-08-13 23:12:21 字數 1089 閱讀 5992

題意:

​ 給出一棵樹,然後按照所給出的方式建立新的邊,然後可以一層層的建邊直到無邊可建。問需要多少個小時,每乙個小時可以建立一條邊,可以多執行緒建立。

思路:

​ 畫圖可以找到規律,最壞的情況是n個點是乙個線性的,那麼時間將是最長,根據線性找規律發現其長度與時間是以2倍遞增的,每乙個新的小時便可以在原來的基礎上畫2倍的線,所以找出最長邊然後判斷2的ans次方即可。

#include 

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 5e5+10;

struct edge

edge[maxn*2];

int n;

int head[maxn],pos;

int dp[maxn][3];

int sonmax[maxn];

void init()

void add_edge(int u,int v,int val)

void input()

}void dfs1(int u,int fa)

else dp[u][1] = max(dp[u][1],dp[to][0] + edge[i].v);

}}void dfs2(int u,int fa)

else

dp[to][2] = max(dp[u][2],dp[u][0]) + edge[i].v;

dfs2(to,u);

}}int main(int argc, char

const *argv)

long

long two = 2;

int ans = 1;

while(two < max)

if(n == 2) ans = 0;

printf("%d\n",ans);

return

0;}

Gym 100781A 樹的直徑 思維

傳送門 題意 給你很多顆樹 當然也可能只有一棵樹 問你怎樣連線起來可以使得形成的樹上最遠的距離最小,並輸出這個距離.思路 當然是和樹的直徑有關,然後可以知道從直徑折半的地方連出去是最優的,先用並查集求出每一棵樹的直徑.然後需要討論幾種情況,一是有一棵樹它的直徑本來就很長,那麼答案有可能是它,然後 必...

SDOI2013 直徑(樹的直徑)

小q最近學習了一些圖論知識。根據課本,有如下定義。樹 無迴路且連通的無向圖,每條邊都有正整數的權值來表示其長度。如果一棵樹有n個節點,可以證明其有且僅有n 1 條邊。路徑 一棵樹上,任意兩個節點之間最多有一條簡單路徑。我們用 dis a,b 表示點a和點b的路徑上各邊長度之和。稱dis a,b 為a...

B樹 B 樹 B 樹 B 樹的區別

b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...