傳送門
比較好想的一道思路題,結果有個地方沒開\(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條路徑中被重複選擇的點,其點權只能被計算一次 ...