牛客小白月賽6 c 桃花

2021-08-25 16:41:10 字數 1283 閱讀 6200

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 262144k,其他語言524288k

64bit io format: %lld

桃花一簇開無主,可愛深紅映淺紅。

——《題百葉桃花》

桃花長在桃樹上,樹的每個節點有乙個桃花,調皮的htbest想摘盡可能多的桃花。htbest有乙個魔法棒,摘到樹上任意一條鏈上的所有桃花,由於htbest法力有限,只能使用一次魔法棒,請求出htbest最多可以摘到多少個桃花。

第一行有乙個正整數n,表示桃樹的節點個數。

接下來n-1行,第i行兩個正整數ai,bi ,表示桃樹上的節點ai,bi之間有一條邊。

第一行乙個整數,表示htbest使用一次魔法棒最多可以摘到多少桃花。

示例1複製

3

1 22 3

複製

3
示例2

複製

3

1 21 3

複製

3
示例3

複製

4

1 22 3

3 4

複製

4
對於100%的測試資料:

1 ≤ n ≤ 1000000

資料量較大,注意使用更快的輸入輸出方式。

大致思路:

很容易想到求樹的直徑,即從任意節點開始dfs一次,找到最長鏈的乙個節點。然後從這個節點出發找到另乙個節點。這兩個節點的距離最長。(用鏈式前向星一次就能ac,用vector容易卡在95%,但吸氧能過)

ac**:

# pragma gcc optimize (3) //吸氧

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

const int maxn = 1e6+10;

vector v[maxn];

bool book[maxn];

int l,res=0;//l為最長鏈的乙個節點

void dfs(int root,int cnt)

for(int i=0;i>n;

for(int i=1;imemset(book,0,sizeof book);

book[1]=1;

dfs(1,1);

memset(book,0,sizeof book);

book[l]=1;

res=0;

dfs(l,1);

cout<}

牛客小白月賽6 C 桃花

題目鏈結 桃花一簇開無主,可愛深紅映淺紅。題百葉桃花 桃花長在桃樹上,樹的每個節點有乙個桃花,調皮的htbest想摘盡可能多的桃花。htbest有乙個魔法棒,摘到樹上任意一條鏈上的所有桃花,由於htbest法力有限,只能使用一次魔法棒,請求出htbest最多可以摘到多少個桃花。第一行有乙個正整數n,...

牛客小白月賽6 C桃花 樹直徑

樹的直徑是指樹的最長簡單路。求法 兩遍bfs 先任選乙個起點bfs找到最長路的終點,再從終點進行bfs,則第二次bfs找到的最長路即為樹的直徑 桃花一簇開無主,可愛深紅映淺紅。題百葉桃花 桃花長在桃樹上,樹的每個節點有乙個桃花,調皮的htbest想摘盡可能多的桃花。htbest有乙個魔法棒,摘到樹上...

牛客小白月賽6 桃花

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 桃花一簇開無主,可愛深紅映淺紅。題百葉桃花 桃花長在桃樹上,樹的每個節點有乙個桃花,調皮的htbest想摘盡可能多的桃花。htbest有乙個魔法棒,摘到樹上任意一條...