題意:給你一棵樹,每個節點都有乙個價值,但每個價值只能加一次,選擇k次圖上葉子節點到葉子節點,使得這k次經過的價值最大(注意不能重複)。
思路:找乙個點當作根節點,長鏈刨分。
**:
#include
using
namespace std;
const
int n=
200005
;typedef
long
long ll;
int head[n]
,nxt[n<<2]
,to[n<<2]
;ll s[n]
;int cnt=0;
void
add(
int u,
int v)
int son[n]
;ll value[n]
;priority_queueq;
//求價值
void
dfs1
(int x)
value[x]
=value[son[x]
]+s[x];}
//最大路徑
void
dfs2
(int x,
int top)
}int
main()
dfs1(1
);dfs2(1
,1);
ll ans=0;
while
(k&&
!q.empty()
)ans+
=q.top()
,q.pop()
,k--
;printf
("%lld"
,ans)
;}
BZOJ 3252 攻略(長鏈剖分)
題目簡述 樹版 k取方格數 眾所周知,桂木桂馬是攻略之神,開啟攻略之神模式後,他可以同時攻略k部遊戲。今天他得到了一款新遊戲 xx半島 這款遊戲有n個場景 scene 某些場景可以通過不同的選擇支到達其他場景。所有場景和選擇支構成樹狀結構 開始遊戲時在根節點 共通線 葉子節點為結局。每個場景有乙個價...
bzoj3252 攻略(長鏈剖分 貪心)
傳送門 長鏈剖分好題。題意 給一棵帶點權的樹,可以從根節點到任一葉節點走k kk次,走過的點只能計算一次,問k kk次走過的點點權值和最大值。思路 考慮將整棵樹帶權長鏈剖分,這樣鏈與鏈之間是不會重複選擇的。然後每條鏈都對應一種方案,我們貪心選擇前k kk大即可。include define ri r...
BZOJ3252 攻略(長鏈剖分,貪心)
bzoj 給定一棵樹,每個點有點權,選定 k 個葉子,滿足根到 k 個葉子的所有路徑所覆蓋的點權和最大。乙個假裝是對的貪心 每次選擇最大的路徑,然後將路徑上所有點的權值清零。那麼我們可以用長鏈剖分來實現這個貪心。鏈長改為最大的路徑權值和,這樣子把每條重鏈的權值丟進乙個堆裡面取 k 次即可。正確性自己...