codeforces 731C 並查集 水

2021-07-23 19:42:08 字數 773 閱讀 5787

題意:給出n只襪子的顏色,每天選擇兩隻襪子,每次能把乙隻襪子染色。問最少染色幾隻襪子能使的每天的襪子顏色一樣。

給每天穿的兩隻襪子連邊,很顯然乙個分量的襪子要一起考慮,並查集維護分量就好了。然後搜出最多的顏色,把分量的點都染成這個顏色即可。

#include 

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 200005

int fa[maxn], color[maxn];

#define find find

int find (int x)

int n, m, k;

vector

a[maxn];

int num[maxn];

int main ()

}for (int i = 1; i <= n; i++)

memset (num, 0, sizeof num);

int ans = 0;

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

ans += sz-max;

for (int j = 0; j < sz; j++)

}cout

<< ans << "\n";

return

0;}

codeforces 731E 優先佇列 DP

題意 給出n個數字,a和b兩個人依次選中1 k k 2 把他們合併之後自己分數加上這些數的和。求兩個人在最右策略下a最多領先b多少。當數字只剩下乙個之後遊戲馬上結束。用 dp i 0 1 表示前i個數字被合併,現在是a b先手到最後遊戲結束最多領先多少。故a要最大化後繼狀態的值,b要最小化後繼狀態的...

CodeForces 455C (貪心,並查集)

題意 給出乙個n個點m條邊的森林,q次詢問,第一種詢問要求輸出乙個點所在樹的直徑,第二種詢問要求合併兩個點所在的樹。思路 先將初始的森林中各個樹的直徑求出來,然後用並查集維護。兩樹合併時,設直徑分別為len1,len2,新樹直徑為max len1,len2,len1 2 len2 2 len1 2 ...

Codeforces 722C 並查集 思維

思路 題目給的運算元從第 1 個到第 n 個數是刪除原陣列中的乙個數,那麼反過來從後往前就是增加原陣列中的乙個數,每增加乙個值,那麼就有四種情況 第一種和前後都不連續,即自成乙個集合 第二種 和前面的數連續,即和前乙個數在乙個集合 第三種和之後乙個數連續,即和之後的乙個數在乙個集合 第四種既和前面乙...