題目位址
第一眼看到此題,感覺就是一道水題,直接加上前nee
dneed
need
小的白邊就行了,再處理到n−1
n-1n−
1條黑邊,但是,打完後突然發現有問題。。。 雖然加上了前nee
dneed
need
小的白邊,但是會出現樹不連通的現象,即無法構成生成樹。
正解思路
二分乙個增量mid
midmi
d(可正可負)。
跑一遍kru
skal
kruskal
kruska
l,將所有的白邊都加上a
aa,記錄構成生成樹後所用到的白邊,如果數量小於nee
dneed
need
就將右端點往左移,否則往右移。
最後的ans
ansan
s需要減去增量nee
d∗mi
dneed * mid
need∗m
id
#include
#include
#include
using
namespace std;
const
int maxn =5*
1e4+5;
const
int maxm =
1e5+5;
int n, m, need, fa[maxn]
, l, r, mid, ans, cnt;
struct node dis[maxm]
;bool
cmp(node x, node y)
intfindset
(int v)
}bool
unionset
(int u,
int v)
bool
check
(int mid)
}sort
(dis +
1, dis +
1+ m, cmp)
;for
(int i =
1; i <= m; i++)if
(tot == n -1)
break;}
for(
int i =
1; i <= m; i++)}
if(white < need)
else
return1;
}int
main()
l =-1e2-5
, r =
1e2+5;
while
(l <= r)
else
}printf
("%d"
, ans)
;return0;
}
一本通 3 1 練習 4 Tree 題解
題目位址 第一眼看到此題,感覺就是一道水題,直接加上前 need 小的白邊就行了,再處理到 n 1 條黑邊,但是,打完後突然發現有問題。雖然加上了前 need 小的白邊,但是會出現樹不連通的現象,即無法構成生成樹。正解思路 二分乙個增量 mid 可正可負 跑一遍 kruskal 將所有的白邊都加上 ...
題解 一本通 5 4 練習 1 塗抹果醬
題目傳送門 給出 n,m,k 表示有乙個 n times m 的網格,第 k 行已經確定了,每個格仔只能填 1,2,3 但是必須滿足相鄰格仔顏色不同,問有多少種合法方案。1 le k le n le 10 4,m le 5 因為這道題目並不難,所以這篇部落格主要講如何卡到 text 至少在2020 ...
一本通的遞迴練習
給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。我們假設對於小寫字母有 a b y z 而且給定的字串中的字母已經按照從小到大的順序排列。char a 10 b 10 將a字串的各種排列依次放到b字串中 int vis 10 n 用vis i 來代表a i 字母有沒有被訪問過 void...