題目
給你乙個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有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...