國家集訓隊 Tree I

2021-10-22 09:15:40 字數 828 閱讀 6297

題目

給你乙個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有nee

dneed

need

條白色邊的生成樹。題目保證有解。

思路

凸優化裸題,要注意的就是,優先選白色(優先選黑色也行),主要是同一斜率可能會切到很多點,那麼就要有乙個標準,要麼選最小點,要麼選最大。另外求出來的點不一定是nee

dneed

need

,所以算答案時就乘上題目給的nee

dneed

need

#include.h>

#define ll long

long

using namespace std;

const

int n=

50009

,m=100009

;struct node

} a[m]

;int n,m,need,ans,fa[n]

,num,ans1;

intfindl

(int x)

intcheck

(int k)

for(

int i=

0; i(!a[i]

.co)

a[i]

.len+=k;

return num;

}void

solve()

}printf

("%d"

,ans1)

;int

main()

國家集訓隊2 Tree I

給你乙個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有need條白色邊的生成樹。題目保證有解。好像有個套路 對於有個數要求的某種邊,可以改變它們的權值,以改變它們加入最小生成樹的順序 包括移出最小生成樹 改變量可以二分。因為改變量 包括符號 越大,加入的邊就越少。細節 include ...

國家集訓隊2 Tree I 題解

題目傳送門 題目大意 給一張圖,找到一棵恰好包含 k kk 條白邊的最小權值生成樹。這是 wqs wqswq s 二分的一道很入門的題。設 g i g i g i 表示包含恰好 i ii 條白邊的生成樹中權值最小的那棵樹的權值。顯然 g i g i g i 是個下凸包,那麼我們二分乙個斜率 k kk...

P2619 國家集訓隊2 Tree I

新增鏈結描述 二分題,考慮kruskal的過程,讓白邊變成need條,權值定了的時候,最小生成樹是定的,如果現在白邊的數量大於need條,那麼我們需要整體增加白邊的權值,相當於讓白邊減少,如果多的話相反。至於增加多少,需要二分去判定。這道題細節挺多的,比如可能有權值 mid會導致白邊多了,權值 mi...