BZOJ 3252 攻略 思路題

2022-05-12 09:45:12 字數 831 閱讀 5835

傳送門

比較好想的一道思路題,結果有個地方沒開\(long\)

\(long\)

\(wa\)了三次。。其實就是模仿一下樹鏈剖分,重新定義重兒子,乙個點的重兒子為所有兒子中到葉節點權值最大的點,然後就和樹鏈剖分一樣\(dfs\)一遍,把那些鏈的頂端的\(sum\)值放到乙個陣列排個序。

#include#include#include#include#includeusing namespace std;

const int maxn = 200005;

typedef long long ll;

inline int rd()

int n,k,head[maxn],cnt,to[maxn],nxt[maxn],fa[maxn];

int w[maxn],son[maxn],num;

ll ans,sum[maxn],tmp[maxn];

inline void add(int bg,int ed)

inline bool cmp(ll x,ll y)

void dfs1(int x)

} sum[x]+=maxson;

}signed main()

dfs1(1);

for(int i=1;i<=n;i++) if(i!=son[fa[i]]) tmp[++num]=sum[i];

sort(tmp+1,tmp+1+num,cmp);

for(int i=1;i<=k;i++) ans+=tmp[i];

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

return 0;

}

刷題 BZOJ 3252 攻略

題目簡述 樹版 k取方格數 眾所周知,桂木桂馬是攻略之神,開啟攻略之神模式後,他可以同時攻略k部遊戲。今天他得到了一款新遊戲 xx 半島 這款遊戲有n個場景 scene 某些場景可以通過不同的選擇支到達其他場景。所有場景和選擇支構成樹狀 結構 開始遊戲時在根節點 共通線 葉子節點為結局。每個場景有乙...

BZOJ3252 攻略 可並堆

網上有很多人說用dfs序 線段樹做.其實stl的堆可以.可並堆可以.很多奇奇怪怪的東西都能做.可並堆比較好想.也比較好寫.分析 首先,這是乙個網路流做不了的題.資料太大.其次.我們可以這樣考慮一下,這個點的子樹中,將這個點的權值僅更新給最大的那個就能滿足 之後,在每乙個葉子節點上,建立乙個大根堆,d...

BZOJ 3252攻略 dfs序 線段樹

bzoj 3252 攻略 dfs序 線段樹 題目大意 給定一棵以1為根的n個點的樹,樹有點權且點權為正整數,可以選擇k條以根作為起點的路徑,每條路徑的價值即這條路徑上所有點的點權之和。但是選擇一條路徑之後,這條路徑上的所有點的點權會變成0。也就是說,這k條路徑中被重複選擇的點,其點權只能被計算一次 ...