bzoj2654 二分 最小生成樹

2021-08-03 09:51:31 字數 764 閱讀 8497

題目戳這裡:

我們知道對於乙個最小生成樹而言,它的白邊權值越大,那麼生成樹中的白邊個數越少,反之亦然。

所以我們每次二分乙個值,給白邊加上它,在做最小生成樹判斷是否大於所需要的,然後就可以二分來搞了。

#include

#include

#include

#include

#define n 100005

using

namespace

std;

int n,m,k,u[n],v[n],w[n],c[n];

struct edge;

edge e[n];

bool cmp(const edge &a,const edge &b)

else

return0;}

int fa[n],tot=0;

int getfa(int u)

bool check(int val)

sort(e+1,e+m+1,cmp);

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

return ans>=k;

}int main()

int l=-110,r=110;

while(lif(r-l==1)

int mid=(l+r)>>1;

if(check(mid))l=mid;

else r=mid-1;

}printf("%d\n",tot-l*k);

}

bzoj2654 二分答案 最小生成樹

2654 tree time limit 30 sec memory limit 512 mb submit 1975 solved 810 submit status discuss description 給你乙個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有need條白色邊的生成...

bzoj2654 二分 最小生成樹 tree

題目傳送門 description 給你乙個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有need條白色邊的生成樹。題目保證有解。input 第一行v,e,need分別表示點數,邊數和需要的白色邊數。接下來e行,每行s,t,c,col表示這邊的端點 點從0開始標號 邊權,顏色 0白色1...

bzoj2654 最小生成樹 二分 tree

description 給你乙個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有need條白色邊的生成樹。題目保證有解。input 第一行v,e,need分別表示點數,邊數和需要的白色邊數。接下來e行,每行s,t,c,col表示這邊的端點 點從0開始標號 邊權,顏色 0白色1黑色 out...