当前位置: 首页 > 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.rkmt.cn/news/14081.html

相关文章:

  • 加密的病例单
  • 【多线程】什么是原子操作(Atomic Operation)? - 详解
  • 复刻江协旋钮控制模块
  • c语言switch和if语句
  • Qt(制作一个方便的文本编辑器)
  • tldr的安装与利用
  • 题解:P7126 [Ynoi2008] rdCcot
  • 实用指南:汽车地带AutoZone EDI需求分析及对接指南
  • 航司网站url后缀参数FECU分析
  • 优化 if/else 的四种设计模式
  • 多corner综合
  • Day11-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\oop\demo06
  • OpenLayers地图交互 -- 章节十一:拖拽材料交互详解
  • 通过IDOR实现权限提升导致未授权用户注入
  • kuboard使用的etcd空间满了如何处理
  • 从拆盒到共创:手办盲盒抽赏小程序的多元体验与文化联结 - 实践
  • xinference推理embedding等小模型
  • day15-项目上线
  • Docker入门 - 实践
  • react useCallback Hook详解
  • 实用指南:小米17手机的上市公司供应商
  • cloudfared 内网穿透经过docker方式遇到的问题
  • CDN + WAF + CLB + Higress 架构下的 TLS 加解密详细解析(适用阿里云)
  • CF407E k-d-sequence 题目分析(0929模拟赛最后一题)
  • vue3踩坑:静态dom无法初始化渲染 - 父组件props与侦听器的交互
  • Mysql DBA学习笔记(客户端常用工具) - 教程
  • MATLAB 中 dsp.FFT 系统对象:从原理到实践的完整指南
  • C# Devexpress GridControl实现全选功能(转载,记录)
  • Nordic发布用于nRF54L系列的nRF Connect SDK裸机选项
  • 微软SSO集成中的顺序用户ID身份验证绕过漏洞剖析