P2619 國家集訓隊2 Tree I

2022-05-10 03:00:33 字數 628 閱讀 4590

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

題目保證有解。

第一行v,e,need分別表示點數,邊數和需要的白色邊數。

接下來e行,每行s,t,c,col表示這邊的端點(點從0開始標號),邊權,顏色(0白色1黑色)。

一行表示所求生成樹的邊權和。

v<=50000,e<=100000,所有資料邊權為[1,100]中的正整數。

2 2 1

0 1 1 1

0 1 2 0

先跑一遍最小生成樹發現選到的白邊數和need是有差距的

把白邊的大小整體上移或下移是對的

二分偏移量check白邊選擇量即可

*注意優先選白邊

#include#include#includeusing namespace std;

int i,m,n,j,k,need,l=-150,r=150,tmp,f[100001];

struct vv

a[1000001];

bool cmp(vv a,vv b)

check(tmp);

printf("%d",k-tmp*need);

}

P2619 國家集訓隊2 Tree I

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

P2619 國家集訓隊2 Tree I

鏈結分析 為了確定白邊選入的數量,所以給白邊加乙個權值,二分這個值,然後最小生成樹。可以發現白邊的數量雖這個值的增大而減小,滿足單調性。有乙個問題 如果在二分過程中給白邊加上mid,白邊數比need多,加mid 1,白邊數need少。即存在很多相等的白邊 和 很多相等的黑邊。如果白邊大於need一定...

國家集訓隊2 Tree I

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