首页 > 其他分享 >种类并查集

种类并查集

时间:2023-10-19 15:38:43浏览次数:35  
标签:int fy 查集 fx unit 敌人 find 种类

P1892 [BOI2003] 团伙
如果你wa,可能是合并的顺序出错

[1,n]表示朋友,[n+1,2*n]表示敌人
如果a,b是朋友,直接合并a,b
如果a,b是敌人:
1.合并a+n和b,a的敌人是b的朋友
2.合并a和b+n,b的敌人是a的朋友

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int f[20005];int d[20005];
int find(int x) {
	return x == f[x] ? x : f[x] = find(f[x]);
}
void unit(int x, int y) {
	int fx = find(x), fy = find(y);
	f[fx] = fy;
}

int main() {
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= 2 * n; i++) f[i] = i;
	while (m--) {
		int x, y;
		char op;
		cin >> op >> x >> y;
		int fx = find(x), fy = find(y);
		if (op == 'F') {//pengyou
			if (fx != fy) {
				unit(x, y);//可以不用再合并两者的敌人
			}
		}
		else {//敌人
			if (fx != fy) {
				unit(x + n, y);//x的敌人是y的朋友
				unit( y + n,x);//y的敌人是x的朋友,注意合并时两者的位置,不然会少因为它的祖先会到后面
			}
		}
	}
	int ans=0;
	for (int i = 1; i <= n; i++) if(i==f[i]) ans++;
	cout << ans;
	return 0;
}

标签:int,fy,查集,fx,unit,敌人,find,种类
From: https://www.cnblogs.com/bu-fan/p/17774792.html

相关文章

  • 并查集
    并查集的原理来自百度百科并查集,在一些有N个元素的集合应用问题中,我们通常是在开始的时候让每个元素构成单个元素的集合,然后按一定顺序讲属于同一组的元素所在集合合并,期间要反复查询一个元素在哪个集合中。描述改问题的抽象数据结构为并查集。并查集是一种树型的数据结构,用于处理......
  • 2023-10-18:用go语言,给定一个数组arr,长度为n,表示有0~n-1号设备, arr[i]表示i号设备的型
    2023-10-18:用go语言,给定一个数组arr,长度为n,表示有0~n-1号设备,arr[i]表示i号设备的型号,型号的种类从0~k-1,一共k种型号,给定一个k*k的矩阵map,来表示型号之间的兼容情况,map[a][b]==1,表示a型号兼容b型号,map[a][b]==0,表示a型号不兼容b型号,兼容关系是有向图,也就是a型号兼容b型号......
  • macOS 如何设置 Finder 打开某种类型的文件时候使用指定的默认 Application 程序 All
    macOS如何设置Finder打开某种类型的文件时候使用指定的默认Application程序AllInOnequestionsolution永久更改用于打开所有特定类型文件的App在Mac上,点按程序坞中的“访达”图标以打开“访达”窗口。选择文件,然后选取“文件”>“显示简介”。还可以按住Contr......
  • 并查集学习指南
    前置芝士并查集思想[find][python]#pythonwhiledeffind(x:int)->int: whilex!=fa[x]: x=fa[x]=fa[fa[x]] returnx#python递归deffind(x:int)->int: iffa[x]!=x: fa[x]=find(fa[x]) returnfa[x][c++]//c++whilelambda/*function<int(int)>fi......
  • [算法分析与设计] 3. 并查集分析与反阿克曼函数
    Union-Find问题:给定\(n\)个元素,最初每个元素在一个集合中,有两种操作,union表示合并两个集合,find表示查询某个特定元素所在的集合。并查集是一种数据结构。其为每个集合寻找一个代表元,代表元可以是任意的,也可以随操作变化,但需要满足任何时刻一个集合的代表元是确定且唯一的。......
  • 并查集
    并查集如果有一个关系网,我们需要建立两点之间的关系,如果仅用一维链表,则有可能无法考虑到两点同为一点“儿子”的情况,则我们需要建立一个方式,从而直接对比两点“祖父”。一.递归查询intfind(intx){ if(fa[x]==x)returnx;//只有祖父自环,如果他也自环,则找到父节点 ......
  • 2023_10_14_MYSQL_DAY_06_MYSQL优化的种类
    MYSQL优化的种类MYSQL的优化,是每一个程序员在做数据查询处理的时候,经常有的步骤那么SQL的优化有很多种,它可以是在硬件方面的,可以是在代码层面的,可以是在数据库方面的优化。下面就详细整理一下30种优化MYSQL的方案:1.在读表的时候,尽可能的避免全表扫描,合理的根据业务需求,在wher......
  • Python word'str'(字符串前缀string prefix)的种类
    Python字符串前缀(Stringprefix) r'string'r'',用法是不会对后方字符串中的转义符进行转义,如: str=r'\n'print(str)#会直接输出\n,并不会输出换行 f'string'f'',用法是对字符进行格式化就和str.format()一样,会对{}进行格式化,如: str=f'你好,{}'......
  • 调用Android设备中已经安装的软件打开各种类型的指定文件
    最近因项目需求需要在android应用程序中下载一些附件,并打开这些附件,比如音视频视频以及图片这些。开始还好,文件类型不是很多,但是后来需求又加上doc/xls/ppt等,后来又兼容了pdf。这时候已经被需求改的烦不胜烦,觉得有必要针对打开本地文件做一个通用的封装了,判断File的类型,然后用指......
  • 并查集的实现【学习算法】
    并查集的实现【学习算法】前言版权推荐并查集的实现最后前言2023-9-2614:38:02以下内容源自《【学习算法】》仅供学习交流使用版权禁止其他平台发布时删除以下此话本文首次发布于CSDN平台作者是CSDN@日星月云博客主页是禁止其他平台发布时删除以上此话推荐算法讲解056【必备】并......