題目鏈結
實際上,每個點只被統計一次,就是選\(k\)條最長的不相交的鏈(鏈形態是從上到下的)。
所以可以想到長鏈剖分。以路徑權值和作為深度,選最長的\(k\)條長鏈就行了。
用nth_element
就可以把排序的複雜度也省了233.
所以複雜度\(o(n)\)。
//10236kb 364ms
#include #include #include //#define gc() getchar()
#define maxin 300000
#define gc() (ss==tt&&(tt=(ss=in)+fread(in,1,maxin,stdin),ss==tt)?eof:*ss++)
typedef long long ll;
const int n=2e5+5;
int enum,h[n],nxt[n],to[n],a[n],son[n],cnt;
ll mxd[n],val[n];
char in[maxin],*ss=in,*tt=in;
inline int read()
inline void ae(int v,int u)
void dfs1(int x)
void dfs2(int x,int top)
int main()
bzoj3252 攻略(長鏈剖分 貪心)
傳送門 長鏈剖分好題。題意 給一棵帶點權的樹,可以從根節點到任一葉節點走k kk次,走過的點只能計算一次,問k kk次走過的點點權值和最大值。思路 考慮將整棵樹帶權長鏈剖分,這樣鏈與鏈之間是不會重複選擇的。然後每條鏈都對應一種方案,我們貪心選擇前k kk大即可。include define ri r...
BZOJ3252 攻略(長鏈剖分,貪心)
bzoj 給定一棵樹,每個點有點權,選定 k 個葉子,滿足根到 k 個葉子的所有路徑所覆蓋的點權和最大。乙個假裝是對的貪心 每次選擇最大的路徑,然後將路徑上所有點的權值清零。那麼我們可以用長鏈剖分來實現這個貪心。鏈長改為最大的路徑權值和,這樣子把每條重鏈的權值丟進乙個堆裡面取 k 次即可。正確性自己...
bzoj 3252 攻略 長鏈剖分 貪心
time limit 10 sec memory limit 128 mb 題目簡述 樹版 k取方格數 眾所周知,桂木桂馬是攻略之神,開啟攻略之神模式後,他可以同時攻略k部遊戲。今天他得到了一款新遊戲 xx半島 這款遊戲有n個場景 scene 某些場景可以通過不同的選擇支到達其他場景。所有場景和選擇...