BZOJ3252 攻略 可並堆

2022-04-30 12:06:09 字數 919 閱讀 2084

網上有很多人說用dfs序+線段樹做...其實stl的堆可以...可並堆可以...很多奇奇怪怪的東西都能做...

可並堆比較好想...也比較好寫... 

分析:首先,這是乙個網路流做不了的題...資料太大...

其次...我們可以這樣考慮一下,這個點的子樹中,將這個點的權值僅更新給最大的那個就能滿足

之後,在每乙個葉子節點上,建立乙個大根堆,dfs一遍,將子節點的堆合併,之後找到根節點,將根節點的權值加上當前位置的價值

最後,根節點中前k大的權值和即為答案...

附上**,精簡可行

#include #include #include #include #include #include #include using namespace std;

#define n 200005

#define ll long long

struct node

mp[n<<1];

struct no

e[n<<1];

int head[n],cnt,fa[n],a[n],n,k;

void add(int x,int y)

int merge(int x,int y)

void dfs(int x,int from)

} mp[fa[x]].x+=a[x];

}int in1[n];

int main()

for(int i=1;iint rot=1,num=0;

for(int i=1;i<=n;i++)

else

}k=min(num,k);

dfs(rot,0);

ll ans=0;

while(k--)

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

return 0;

}

BZOJ 3252 攻略 思路題

傳送門 比較好想的一道思路題,結果有個地方沒開 long long wa 了三次。其實就是模仿一下樹鏈剖分,重新定義重兒子,乙個點的重兒子為所有兒子中到葉節點權值最大的點,然後就和樹鏈剖分一樣 dfs 一遍,把那些鏈的頂端的 sum 值放到乙個陣列排個序。include include includ...

刷題 BZOJ 3252 攻略

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

BZOJ 3252攻略 dfs序 線段樹

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