一本通 3 1 練習 4 Tree 題解

2022-06-04 03:06:12 字數 1023 閱讀 2343

題目位址

第一眼看到此題,感覺就是一道水題,直接加上前\(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...