題目位址
第一眼看到此題,感覺就是一道水題,直接加上前\(need\)小的白邊就行了,再處理到\(n-1\)條黑邊,但是,打完後突然發現有問題。。。 雖然加上了前\(need\)小的白邊,但是會出現樹不連通的現象,即無法構成生成樹。
正解思路
二分乙個增量\(mid\)(可正可負)。
跑一遍\(kruskal\),將所有的白邊都加上\(a\),記錄構成生成樹後所用到的白邊,如果數量小於\(need\)就將右端點往左移,否則往右移。
最後的\(ans\)需要減去增量\(need * mid\)
#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)
int findset(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
return 1;
}int main()
l = -1e2 - 5, r = 1e2 + 5;
while (l <= r) else
}printf("%d", ans);
return 0;
}
一本通 3 1 練習 4 Tree 題解
題目位址 第一眼看到此題,感覺就是一道水題,直接加上前nee dneed need 小的白邊就行了,再處理到n 1 n 1n 1條黑邊,但是,打完後突然發現有問題。雖然加上了前nee dneed need 小的白邊,但是會出現樹不連通的現象,即無法構成生成樹。正解思路 二分乙個增量mid midmi...
題解 一本通 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...