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

算法题(188):团伙

审题:

本题需要我们通过解析所有人之间的关系,从而判断出朋友团体的总个数并输出

思路:

方法一:扩展域并查集

由于这里涉及对朋友/敌人等关系集合的频繁操作,所以我们需要使用并查集来操作,但是普通的并查集只有一种集合域,也就是只能维护一种关系。这里有两种关系存在,常规并查集已经无法满足要求,所以我们需要使用扩展域并查集

补充:扩展域并查集

相比于普通并查集来说,这种并查集可以维护更多的关系,具体的实现逻辑如下

1.将fa数组的集合域分为朋友域和敌人域

朋友域为1~n,敌人域为1+n~n+n

2.对于x元素来说,和x在同一个集合的是朋友,和x+n在同一个集合的是敌人

讲解操作过程:

假设现在人数n为3,1和2是敌人,2和3是敌人。

接下来我们按照扩展域并查集的逻辑进行模拟操作

由于1和2是敌人,所以我们将1和2的敌人域连起来,将2和1的敌人域连起来,同理后面2和3也近似操作

按照题意,敌人的敌人就是朋友,所以1和3应该是朋友。而我们看到经过前面的操作,1和3处于同一个集合,满足题意,方法成立

解题:
 

#include<iostream>
using namespace std;
const int N = 1010;
int n, m;
int fa[N * 2];
int find(int x)
{return fa[x] == x ? x : fa[x] = find(fa[x]);
}
void un(int x, int y)//让朋友域当根节点
{fa[find(x)] = find(y);
}int main()
{cin >> n >> m;//初始化扩展并查集for (int i = 1; i <= 2 * n; i++){fa[i] = i;}//建立关系for (int i = 1; i <= m; i++){char x;int y, z;cin >> x >> y >> z;if (x == 'E')//敌人关系{un(z + n, y);un(y + n, z);}else//朋友关系{un(y, z);}}//查询团伙数int ret = 0;for (int i = 1; i <= n; i++){if (fa[i] == i) ret++;}cout << ret << endl;return 0;
}

注意:

1.题目中只说了两个条件:一个是敌人的敌人是朋友,另一个是朋友的朋友是朋友。

但是没有说朋友的敌人是不是敌人,敌人的朋友是不是敌人,所以我们不需要进行特别的其他操作

2.由于实际上存在的人数是n,敌人域是我们自己构建的,所以我们最后统计团伙的时候不能统计到敌人域,只需要统计前n个即可

3.由于我们统计的是朋友域,所以我们的根节点一定要是朋友域的节点,否则就无法统计到了,在传参给un函数的时候要注意顺序

P1892 [BalticOI 2003] 团伙 - 洛谷

http://www.dtcms.com/a/346481.html

相关文章:

  • 【0基础PS】蒙版与剪贴蒙版详解
  • `strchr` 字符串查找函数
  • 信息结构统一论:物理世界与人类感知、认知及符号系统的桥梁
  • 嵌入式-时钟树和时钟树编程-Day20
  • 大宗商品、股票指数及ETF期权五档买卖分时tick级历史交易数据深度解析
  • zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS
  • 2025最新版mgg格式转MP3,mflac转mp3,mgg格式如何转mp3?
  • FastText 词向量全景指南(没那么全)
  • 【论文】Zotero文献管理
  • [e3nn] docs | 不可约表示(Irreps)
  • AI 大模型 “进化史”:从参数竞赛到场景落地,技术突破藏着哪些逻辑?
  • C#_异步编程范式
  • kvcache比赛记录
  • JavaScript Object 操作方法及 API
  • GEO优化专家孟庆涛发布:《GEO内容优化的四大黄金标准》
  • 20250822 组题总结
  • 车辆方向数据集 - 物体检测
  • 深度学习:入门简介
  • 本地部署DeepSeek实战
  • 工作后的总结和反思1
  • Huggingface入门实践 Audio-NLP 语音-文字模型调用(一)
  • FPGA 在情绪识别领域的护理应用(四)
  • 【电子通识】芯片生产考验“三重门”之CP、FT与WAT测试
  • Excel表格指定数据读取写入到另一个Excel表中(指定列指定行)
  • 使用配置文件恢复开启Telnet端口(IndivKey方式)
  • 20250822给荣品RD-RK3588开发板刷Rockchip原厂的Android14时点亮荣品的8寸屏
  • 情绪感知+低延迟,声网语音在实战里太稳了
  • WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析八
  • Mixture of Experts Guided by Gaussian Splatters Matters
  • Python 调用 sora_image模型 API 实现图片生成与垫图