CF1209D — Cow and Snacks
题意#
by 代码源
思路#
每个客人都有两种喜欢的小吃,因此我们可以以小吃为点,每个客人的两个喜欢的小吃之间连一条边
对于一个 > 1 的连通块,一定有一个客人吃到两个点心,存在一种排序方式,使其他的人都吃到一个点心(比如 BFS序),因此一个
大小为 的连通块可以满足 个客人。
假设连通块的个数为 , 那么开心的客人有 个,悲伤的客人就有 个
因此可以用并查集维护连通块个数
SOLUTION#
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int fa[N];
int find(int x) {
if(fa[x] != x) fa[x] = find(fa[x]);
return fa[x];
}
int main() {
int n, m; scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i ++ ) fa[i] = i;
for(int i = 0; i < m; i ++ ) {
int u, v; scanf("%d%d", &u, &v);
fa[find(u)] = find(v);
}
int ans = 0;
for(int i = 1; i <= n; i ++ ) if(i == find(i)) {
ans ++;
}
printf("%d\n", m - n + ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现