CF1209D Cow and Snacks 题解
考虑以零食为点建无向图,$(u,v)\in E$ 当且仅当存在一个客人喜欢零食 $u,v$。
对于其中每一个大小为 $m$ 的连通块,总能安排出一种顺序使得连通块中的零食可以满足 $m-1$ 个客人,
即第一个客人吃掉其中 $2$ 个零食,剩下 $m-2$ 个客人分别吃掉其中 $1$ 个零食。
也就是在满足 $n$ 个客人的前提下,图中每多一个连通块,就少一个能满足的客人。
并查集统计图中连通块个数 $c$,答案即为 $k - n + c$。
#include <cstdio>
int n, k, u, v, c, f[100050];
int F(int x) {return x == f[x] ? x : f[x] = F(f[x]);}
int main()
{
scanf("%d%d", &n, &k);for(int i = 1;i <= n;++i) f[i] = i;for(int
i = 0;i < k;++i) scanf("%d%d", &u, &v), f[F(u)] = F(v);for(int i
= 1;i <= n;++i) c += i == F(i);return printf("%d", k - n + c), 0;
}