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

Atcoder:[abc392E] Cables and Servers

正文

分析

最开始,一定有许多互不相连集合(这里将最开始联通的块成为集合),为了让这些互不相连的集合连成一块,我们需要拆掉一些原有的线。

为了保证图是联通的,我们只需要留下不多余的线。

多余是什么意思呢?
设若 \(A,B\) 两点已经联通了,此时又加进来一条连接 \(A,B\) 的边,那么这条边就是多余的,它即使不存在也不会改变原来的联通情况。

我们可以让这些多余的边发挥作用,将它们连接到不同的集合。

另外,易得最开始的集合个数即为操作次数。

思路

两点是否联通可以用并查集实现。

找出多余的线,把这些线放到一个工作集合当中。

遍历工作集合当中的这些多余的线,找到可以发挥作用的线,将其连到不同的集合。

怎么连到不同的集合?
我们可以先将不同的集合处理出来,将它们的根储存在 \(S\) 数组中,再使用双指针类似尺取法的方式,就可以找到不同的集合。具体方法是这样的:

  • 设现在总共有 \(k\) 个集合,那么 \(l=1,r=k\)
  • \(\text{Kruskal}\) 算法,从工作集合中不断选边。
  • 若当前这条边的端点 \(x\)\(S_r\) 不是同个集合,那么两个集合合并,\(S_r\) 这个独立的集合就不存在了,留下了 \(x\) 所在的集合,\(r\) 即减少 \(1\)。再选下一条边……
  • 否则,若当前这条边的端点 \(x\)\(S_l\) 不是同个集合,那么两个集合合并,\(S_l\) 这个独立的集合就不存在了,留下了 \(x\) 所在的集合,\(l\) 即增加 \(1\)。再选下一条边……
  • 直到 \(l=r\),说明集合已经合并完了。

代码

时间复杂度 \(O(n)\),空间复杂度 \(O(n)\),华丽通过。

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N=1e6+10;
struct node{int x,y;
};
node a[N];
queue<int> b;
int n,m;
int fa[N];
int ct[N],k;
int find(int x){if(x==fa[x]){return x;}return fa[x]=find(fa[x]);
}
signed main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m;for(int i=1;i<=n;i++){fa[i]=i;}for(int i=1;i<=m;i++){cin>>a[i].x>>a[i].y;int fx=find(a[i].x),fy=find(a[i].y);if(fx==fy){b.push(i);continue;}fa[fx]=fy;}for(int i=1;i<=n;i++){if(fa[i]==i){ct[++k]=i;}}cout<<k-1<<endl;int l=1,r=k;while(!b.empty()&&l!=r){int id=b.front();b.pop();int fx=find(a[id].x);cout<<id<<' '<<a[id].y<<' ';if(fx==ct[r]){cout<<ct[l]<<endl;fa[ct[l]]=fx;l++;}else{cout<<ct[r]<<endl;fa[ct[r]]=fx;r--;}}return 0;
}
http://www.jsqmd.com/news/1307881/

相关文章:

  • 免费解锁Windows多用户远程桌面:RDP Wrapper完全配置指南
  • 和信通卡回收全攻略:闲置卡券变现金,一篇讲透怎么卖最划算及如何避坑。 - 鼎鼎收礼品卡回收
  • 2026善水道路救援|贵州全省 24 小时车辆救援服务热线:400-868-0693 - 滚动商讯
  • SpringBoot+Vue全栈墙绘平台开发实战
  • 大兴区壁挂炉安装公司推荐,净水机安装公司推荐怎么选不踩坑?2026避坑指南与公司推荐 - geo88
  • 如何快速获取B站推流码:开源工具的完整指南
  • NAS机箱六大行业应用场景的常见挑战与平台化应对
  • 私有化在线办公平台搭建指南:5步实现团队高效协作
  • 2026 温州别墅装修设计师推荐大宅全案优选,首推翁雅静 - 滚动商讯
  • 2026年烟台健身设备工厂实力与口碑盘点 - 滚动商讯
  • C#获取Windows系统图标的四种核心方法与最佳实践
  • 武校武术段位证书有用吗?陈家沟王战军太极武术学校考级认证体系 - 圣龙武术朱老师
  • Joplin开源笔记项目深度构建与开发环境配置实战指南
  • 2026 年现阶段丽江到嘉兴故障车托运公司哪家靠谱,车坏在嘉兴高速,别乱拖!找对它能省千元还不毁车 - 行业推荐【认证官】
  • 2026江西24小时道路救援|全省全覆盖拖车、搭电、换胎、送油救援 - 滚动商讯
  • 构建英雄联盟生态的现代化工具链:League Akari技术架构深度解析
  • 二叉搜索树中查找第K小元素的算法与实践
  • 2026年助听算法定制开发哪家好 - 滚动商讯
  • 惠阳黄金回收避坑指南 惠奢汇带你高价变现不踩雷 - 生活测评小能手
  • 技术定价的核心要素与实战策略
  • Gemma 4开源模型本地部署与性能优化指南
  • 让 Claude Code 拥有自我进化和记忆系统|得物技术
  • 武汉理工大学人力资源管理 自考报名咨询 - 升学择校早知道
  • 三分钟搞定Linux WiFi 7:rtw89驱动终极安装指南
  • 2026福建24小时道路救援|善水道路救援:400-868-0693 全省全覆盖 - 滚动商讯
  • 3步解锁Microsoft 365完整功能:零侵入式Office激活方案深度解析
  • HEIF Utility:Windows用户必备的HEIC图片查看与格式转换解决方案
  • 画幅比例选错=废片率飙升300%?可灵专业级设置标准,含8类创作场景速查表
  • 品牌线上控价维权机构推荐:专业平台如何解决全网低价窜货乱象 - 资讯报道
  • 四维雷达图:从数据标准化到业务沟通的完整实践指南