首页 > 其他分享 >[学习笔记]扩展域并查集

[学习笔记]扩展域并查集

时间:2023-10-30 17:34:38浏览次数:39  
标签:反集 朋友 查集 扩展 笔记 int include 敌人

扩展域并查集

可以维护类似于 P1892[BOI2003]团伙 的题目。

题目中有两种关系:朋友和敌人,并规定

  • 一个人的朋友的朋友是朋友
  • 一个人的敌人的敌人是朋友

引入反集的概念,例如有三个人 \(a,b,c\),他们的反集为 \(a',b',c'\)。

如果 \(a,b\) 为敌人,连接 \(a,b'\) 和 \(a',b\);

如果 \(a,b\) 为朋友,连接 \(a,b\);

这样敌人的敌人恰好在一个连通块内,朋友的朋友也在一个连通块内,符合题意。

code

#include<iostream>
#include<cstdio>
using namespace std;
const int N=1010;
int n,m,f[N<<1],ans;
int find(int x){
	if(x==f[x])return x;
	return f[x]=find(f[x]);
}
void add(int x,int y){
	int fx=find(x),fy=find(y);
	if(fx!=fy) f[fx]=fy;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=2*n;i++){
		f[i]=i;
	}
	for(int i=1;i<=m;i++){
		char opt[2];
		int p,q;
		scanf("%s%d%d",&opt,&p,&q);
		if(opt[0]=='F'){
			add(p,q);
			// add(p+n,q+n); 没有说朋友的敌人也是敌人
		}
		else{
			add(q+n,p);
			add(p+n,q);
            //父亲在1~n方便统计
		}
	}
	for(int i=1;i<=n;i++){
		if(f[i]==i) ans++;
	}
	printf("%d\n",ans);
	return 0;
}

标签:反集,朋友,查集,扩展,笔记,int,include,敌人
From: https://www.cnblogs.com/muzqingt/p/17798380.html

相关文章

  • python爬虫知识体系80页md笔记,0基础到scrapy项目高手,第(2)篇:http协议复习精讲
    本文主要学习一下关于爬虫的相关前置知识和一些理论性的知识,通过本文我们能够知道什么是爬虫,都有那些分类,爬虫能干什么等,同时还会站在爬虫的角度复习一下http协议。完整体系笔记直接地址:请移步这里共8章,37子模块,总计5.6w+字今天这一篇主讲:爬虫基础本阶段本文主要学......
  • 谷歌搜索引擎课程笔记
    1、bywave、lantem搜索引擎处理流程GoogleHackingDatabase:GHDB汇总了数千条谷歌搜索高级语法,涵盖了立足点、敏感路径、敏感文件、错误信息、漏洞文件、漏洞服务器、Web服务器检测等方方面面。2004年开始更名为GHDB,现在由网站exploit-db.com维护GoogleHacking操作符基础操作符:......
  • 《软件需求开发最佳实践:基于模型驱动的需求开发过程》阅读笔记二
    在阅读《软件需求开发最佳实践:基于模型驱动的需求开发过程》的四到六章后,我对基于模型驱动的需求开发过程有了更深入的理解和实践。这些章节详细介绍了需求建模、需求验证和需求变更管理的方法和技巧,为我提供了更全面的指导。在需求建模方面,书中介绍了如何使用统一建模语言(UML)和......
  • 《软件需求开发最佳实践:基于模型驱动的需求开发过程》阅读笔记一
    在阅读《软件需求开发最佳实践:基于模型驱动的需求开发过程》的一到三章后,我对基于模型驱动的需求开发过程有了更深入的理解。这些章节详细介绍了需求开发的基本概念、模型和流程,以及需求获取和分析的方法,为我提供了宝贵的指导。首先,我了解到基于模型驱动的需求开发过程是一种系统......
  • 《软件需求开发最佳实践:基于模型驱动的需求开发过程》阅读笔记三
    在阅读《软件需求开发最佳实践:基于模型驱动的需求开发过程》的七到最后一章后,我对基于模型驱动的需求开发过程有了更深入的理解和掌握。这些章节详细介绍了需求工程的实践案例、团队协作和沟通技巧,以及持续改进和评估等方面的内容,为我提供了更全面的指导和启示。在实践案例方面,书......
  • 《软件需求模式》阅读笔记一
    《软件需求模式》阅读笔记与心得体会在阅读《软件需求模式》的前四章节之后,我对软件需求模式有了更深入的理解。这本书以实用为主,详细介绍了如何分析、设计、实现和测试软件需求,对于软件工程师来说,具有很高的参考价值。需求模式是软件开发过程中的重要环节,它描述了需求的类型、......
  • 《软件需求模式》阅读笔记二
    在阅读《软件需求模式》的五到八章节之后,我对软件需求模式的理解更加深入。这些章节详细介绍了需求跟踪、需求验证以及需求变更管理等方面的内容,为我在软件开发过程中提供了宝贵的指导。需求跟踪是确保软件需求得以实现的关键环节。通过阅读这本书,我了解到需求跟踪的主要目的是确......
  • 《软件需求模式》阅读笔记三
    在阅读《软件需求模式》的九到最后一章节后,我对软件需求模式的理解和应用能力得到了进一步提升。这些章节介绍了更多高级的需求模式和应用案例,帮助我更好地掌握需求工程的精髓。在这些章节中,作者详细介绍了如何使用需求模式来解决复杂的软件需求问题。通过分析和归纳各种实际需求......
  • 第二章读书笔记
    print("学号:3116")#3运行超市抹零结账行为a=float(input("第一个商品价格:"))b=float(input("第二个商品价格:"))c=float(input("第三个商品价格:"))d=a+b+cprint("总计",int(d))print()#4计算学生成绩的分差和平均分a=input("课程一的分数:")b=input("课程二的分数:&qu......
  • 狂神go语言零基础教学视频学习笔记
    前言该笔记灵感来源于B站《【狂神说】Go语言零基础学习视频通俗易懂》源视频地址:【狂神说】Go语言零基础学习视频通俗易懂个人声明:本文记录个人在进行该视频学习中的知识总结,帮助大家能更快地进行对该视频内容的学习;一.环境安装下载网站:Go下载-Go语言中文网-Golang中......