当前位置: 首页 > news >正文

启发式合并 [USACO22DEC] Making Friends P

题意

\(N\)\(M\) 关系,按照编号从小到大,牛依次离开,每一头牛离开时它认识的牛会互相认识,求最后新增了多少朋友关系。

\(N,M\le 2\times 10^5\)

解法

我们将操作看成每个点边集合的合并,尝试使用启发式合并解决问题。

但是直接做又发现没有办法搞,因为我们会算重很多,于是我们选择仅仅连一条边,从编号小到编号大。

这个样子我们并不会错过什么,因为边集的合并是从小节点开始的,我们贪心选择相连的最小节点合并一定是不劣的,所以就做完了,复杂度就是标准的启发式合并。

代码↓

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MN=1e6+116;
int n, m, ans=0; set <int> G[MN];
signed main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>n>>m; ans=-m;for(int i=1; i<=m; ++i){int u, v; cin>>u>>v;G[min(u,v)].insert(max(u,v));}for(int i=1; i<=n; ++i){if(G[i].empty()) continue;ans+=G[i].size();int u=*G[i].begin();//最小的辣个G[i].erase(G[i].begin());if(G[u].size()<G[i].size()) swap(G[u],G[i]);for(auto v:G[i]) G[u].insert(v);}cout<<ans<<'\n';return 0;
}
http://www.jsqmd.com/news/6185/

相关文章:

  • 加密的病例单
  • 【多线程】什么是原子操作(Atomic Operation)? - 详解
  • 详细介绍:视频融合平台EasyCVR构筑智慧交通可视化管理与智能决策中枢
  • docker 在x86上build arm 镜像
  • 9.29软工
  • 不一样的.NET烟火,基于Roslyn的开源代码生成器
  • 详细介绍:深入浅出 XSS — 从原理到实战与防护
  • vxe-table 数据量过大时切换空白
  • 复刻江协旋钮控制模块
  • 第三方控件库的添加和使用
  • 实用指南:基于 HTML、CSS 和 JavaScript 的智能图像灰度直方图匹配系统
  • C4NR PVP服务器1.2 天穹炮塔更新
  • 树形dp [JOI Open 2020] 发电站 / Power Plant
  • 深入解析:灵画-AI绘画小程序
  • 实用指南:CAN邮箱深度解析:从硬件架构到实战应用
  • 产品排序
  • c语言switch和if语句
  • Qt(制作一个方便的文本编辑器)
  • DeepSeek-V3.2-Exp 完整分析:2025年AI模型突破与稀疏注意力技术深度解析
  • Java EE初阶启程记05---线程安全 - 指南
  • tldr的安装与利用
  • DataGridView表格控件使用说明
  • 题解:P7126 [Ynoi2008] rdCcot
  • MyBatis技术详解:从入门到高效开发 - 详解
  • 解码数据结构队列
  • 实用指南:Linux Shell 脚本:从零到进阶的实战笔记
  • 解决升级 Windows 11 24H2 后 NAS 共享无法显示的问题
  • 实用指南:汽车地带AutoZone EDI需求分析及对接指南
  • 商城类电商购物APP网购原型——实战计划原型
  • 【还未找到原题】宝石(GEM) - Harvey