牛客小白月賽22 B題(樹的直徑 dp)

2021-10-03 06:31:26 字數 1027 閱讀 3614

題目鏈結

這個題目找最長的鏈其實就是找樹的直徑,不過需要注意的是一般求樹的直徑,長度一般都是邊的權值相加,但這裡是點的權值相加。接著就開始求最長鏈了。

如何求最長鏈?首先我們要建立乙個無向圖,把所有的點和邊連線起來,然後開始嘗試經過每乙個點的最長鏈,從而找到最長的鏈。求經過某個點的最長鏈時,我們可以先求出從這個點出發可以到達的最遠距離,然後再找出從這個點出發的第二遠的距離,最後將兩者相加即可得到經過該點的最長鏈。

然後不斷更新最長鏈即可得到答案。

在求經過某點到達的最遠距離時,是基於乙個動態規劃的思想

d[x]為從x出發可到達的最遠距離。

最後即可得到結果

實現**

#include

#include

#include

using

namespace std;

const

int maxn=

1e5+10;

const

int inf=

1e9+10;

typedef

long

long ll;

ll n,ans;

ll a[maxn]

,dp[maxn]

;vector<

int> e[maxn]

;void

dfs(

int u,

int be)

else

if(dp[v]

+a[u]

>tmp2)

} dp[u]

=tmp1;

ans=

max(ans,tmp1+tmp2-a[u]);

}int

main()

for(

int i=

0;i1;i++

) ans=

-inf;

dfs(1,

-1);

cout<

return0;

}

小白月賽22 B 樹上子鏈

考察點 樹的直徑 坑點 long long,是點權不是邊權 乙個點也算一條鏈 關於樹的直徑 這道題考察的是樹的直徑,最好用樹形dp來寫,具體解釋詳見上述部落格,這道題不友好的地方是把原先的邊權搞成了點權,這就讓人十分的頭疼,一頭疼這道題就涼涼,哈哈,可能還是對這個知識點掌握的不夠到位吧 includ...

牛客練習賽22 B 送分題

資料結構之神ccz又在出毒瘤資料結構了 神出了這樣乙個題 給你三個數,在這三個數中間任意加 或者是 然後可以隨便打括號,只要這個表示式合法 比如說1 2 3可以得到 不能改變這三個數的原順序 最大化表示式的值 輸入三行,每行乙個數 分別表示a,b,c輸出一行乙個數表示答案示例1 複製 1 23 複製...

牛客小白月賽22

d題 題目鏈結 解題思路 直接暴搜,因為只有10個卡片嘛10 所以最多計算 10 10!次,直接列舉全排列算就可以了 include include using namespace std const int inf 0x3f3f3f3f int x 22 y 22 c 22 int main do...