[洛谷p1892]团伙

Memoryofwinter Memoryofwinter     2022-10-04     709

关键词:

题目大意:有n个人,关系为:朋友的朋友是朋友,敌人的敌人是朋友。如果是朋友就在一个团队内,是敌人就不在,现在给出一关系,问最多有多少团伙。
题解:并查集,建反集,如果是朋友,就把他们的并查集合并;如果是敌人,就把他们分别和对方的反集合并,统计最后有几个联通块

C++ Code:

#include<cstdio>
using namespace std;
const int maxn=1010<<1;
int n,m,ans;
int f[maxn];
char ch[10];
int find(int x){return x==f[x]?x:(f[x]=find(f[x]));}
void merge(int x,int y) {int xx=find(x),yy=find(y);f[xx]=yy;}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)f[i]=i,f[i+n]=i+n;
	for (int i=0;i<m;i++){
		int a,b;
		scanf("%s%d%d",ch,&a,&b);
		if (ch[0]==‘F‘){
			int x=find(a),y=find(b);
			if (x!=y)f[x]=f[y];
		}else if (ch[0]==‘E‘){
			int x=find(a),y=find(b),z=find(a+n),w=find(b+n);
			if (x!=w)f[w]=f[x];
			if (y!=z)f[z]=f[y];
		}
	}
	for (int i=1;i<=n;i++)ans+=(f[i]==i);
	printf("%d
",ans);
	return 0;
} 

 

p1892[boi2003]团伙并查集(代码片段)

...我的朋友;我敌人的敌人也是我的朋友。两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。输入输出格式输入格式: 输入文件gangs.in的第一行是一个整数N(2<... 查看详情

解题报告:luogup1892(代码片段)

题目链接:P1892[BOI2003]团伙最近懒死了。和P1525关押罪犯和相似,也要有一个记录敌人信息的数组。这里对这个数组有个好些的理解:记录敌人集合中的任意一个,由于并查集的性质,其他的也随之确定。注意的是,在两个团伙... 查看详情

codevs2597团伙

2597团伙 题目描述Description1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:我朋友的朋友是我的朋友;我敌人的敌人也是我的朋友。 两个强盗是... 查看详情

2597团伙

2597团伙 时间限制:1s空间限制:128000KB题目等级:黄金Gold    题目描述Description1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:我朋友的朋... 查看详情

并查集团伙

[codevs2597]团伙 时间限制:1s 空间限制:128000KB 题目等级:黄金Gold  题目描述 Description1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:... 查看详情

codevs2597团伙

2597团伙 时间限制:1s空间限制:128000KB题目等级:黄金Gold   题目描述Description1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:我朋友的朋友是... 查看详情

codevs2597团伙

...朋友;我敌人的敌人也是我的朋友。 两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。输入描述 InputDescription输入文件gangs.in的第 查看详情

codevs2597团伙

...朋友;我敌人的敌人也是我的朋友。 两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。输入描述 InputDescription输入文件gangs.in的第 查看详情

团伙封锁阳光大学(代码片段)

团伙#include<iostream>#include<cstdio>#include<algorithm>usingnamespacestd;constintmaxn=2e5+7;intfa[maxn],en[maxn],size[maxn];intn,m;intfind(intx)if(fa[x]==x)returnx;returnfa[x]=find( 查看详情

团伙(并查集经典)

...bsp;2.我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这N个人的M条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能有多少个团伙?方法:1#include<cstdio>2#inc... 查看详情

poj1703(各种姿势)

...http://poj.org/problem?id=1703 题意:有n个人分别属于两个团伙,接下来m组形如ch,x,y的数据,ch为“D"表示x,y属于不同的团伙,ch为"A"表示询问x,y书否属于同一个团伙; 解法1:我们可以用jion(x,y)属于同一个团伙,jion(x+n,y)表示x... 查看详情

题解团伙(代码片段)

...是我的朋友;    所有是朋友的人组成一个团伙。告诉你关于这n个人的m条信息,即某两个人是朋友,或 查看详情

[并查集]团伙

题号:ZHOJ1258思路:并查集。给每个人建立一个“正集”(朋友)、一个“反集”(敌人),反集要么为空、要么指向一个正集,维护这两类集合,最后统计“正集”的个数。1#include<cstdio>2#include<cstring>... 查看详情

luogu1892团伙

题解:让一个二维数组存一下他的敌人举例:ans[i][0]就是i的敌人的个数,然后a[i][j]就是指他第j个敌人。#include<iostream>#include<cstdio>#defineX10000+7usingnamespacestd;intfa[X],ans[X][X];intfind(intx) if(fa[x]==x)returnx; returnfa 查看详情

并查集bzoj1370-[baltic2003]gang团伙

...2、我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这n个人的m条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能有多少个团伙?【思路】水………... 查看详情

续并查集学习笔记——gang团伙题解

...2、我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这n个人的m条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能有多少个团伙?Input第1行为n和m,N小于1000,M小... 查看详情

打击犯罪(black)

...目描述题目描述 Description某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了一... 查看详情

题解打击犯罪(代码片段)

...目描述    某个地区有n(n≤1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1至n,他们有些团伙之间有直接联系,,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了... 查看详情