【Codevs2597】团伙

Description

1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:

我朋友的朋友是我的朋友;

我敌人的敌人也是我的朋友。

两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。

Input

输入文件gangs.in的第一行是一个整数N(2<=N<=1000),表示强盗的个数(从1编号到N)。 第二行M(1<=M<=5000),表示关于强盗的信息条数。 以下M行,每行可能是F p q或是E p q(1<=p q<=N),F表示p和q是朋友,E表示p和q是敌人。输入数据保证不会产生信息的矛盾。

Output

输出文件gangs.out只有一行,表示最大可能的团伙数。

Sample Input

6
4
E 1 4
F 3 5
F 4 6
E 1 2

Sample Output

3

HINT

2<=N<=1000

1<=M<=5000

1<=p q<=N

题解

并查集,遇到朋友合并,遇到敌人向图中加一条边,最后for一下点,如果x与y相连,x与z相连,就合并y和z(敌人的敌人就是朋友)

#include<iostream>
using namespace std;
const int N=10010;
const int M=50010;
struct node{
	int next,to;
}e[M];
int head[N],fa[N];
int n,m,x,y,cnt=0,ans;
char ch;
void ins(int u,int v){
	e[++cnt].to=v; e[cnt].next=head[u]; head[u]=cnt;
}
int root(int x){
	if (fa[x]!=x) fa[x]=root(fa[x]); return fa[x];
}
void Union(int x,int y){
	fa[x]=y;
}
int main(){
	cin>>n>>m;
	for (int i=1;i<=n;i++) fa[i]=i;
	for (int i=1;i<=m;i++){
		cin>>ch>>x>>y;
		if (ch==‘E‘){
			ins(x,y);ins(y,x);
		}else{
			if (root(x)!=root(y)) Union(fa[x],fa[y]);
		}
	}
	for (int k=1;k<=n;k++)
		for (int i=head[k];i;i=e[i].next)
			for (int j=head[e[i].to];j;j=e[j].next)
			if(k!=e[j].to&&root(k)!=root(e[j].to)) Union(fa[k],fa[e[j].to]);
	for (int i=1;i<=n;i++) if (fa[i]==i)ans++;
	cout<<ans;
}

  

时间: 2024-10-10 07:22:02

【Codevs2597】团伙的相关文章

codevs2597 团伙

题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友. 两个强盗是同一团伙的条件是当且仅当他们是朋友.现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙. 输入描述 Input Description 输入文件gangs.in的第一行是一个整数N(2<=N<=1000),表示强盗的个数(从1编号到N). 第二行M(1<=M<=500

【并查集】团伙

[codevs2597] 团伙 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友. 两个强盗是同一团伙的条件是当且仅当他们是朋友.现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙. 输入描述 Input Description 输入文件gangs.in的第

code vs 2597 团伙

题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友. 两个强盗是同一团伙的条件是当且仅当他们是朋友.现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙. 输入描述 Input Description 输入文件gangs.in的第一行是一个整数N(2<=N<=1000),表示强盗的个数(从1编号到N). 第二行M(1<=M<=500

【并查集】BZOJ1370- [Baltic2003]Gang团伙

[题目大意] 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: 1. 我朋友的朋友是我的朋友: 2. 我敌人的敌人是我的朋友: 所有是朋友的人组成一个团伙.告诉你关于这n个人的m条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能有多少个团伙? [思路] 水………NOIP的小孩都不屑于玩…… 把i拆成i和i+n,其中i表示i的朋友,i+n表示i的敌人.对于(i,j): (1)i,j是朋友,那么合并i和j. (2)i,j不是朋友,那么合并i和j+

并查集之团伙(codevs)

2597 团伙 时间限制: 1 s 空间限制: 128000 KB 题目描述 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友. 两个强盗是同一团伙的条件是当且仅当他们是朋友.现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙. 输入描述 输入文件gangs.in的第一行是一个整数N(2<=N<=1000),表示强盗的个数(从1编号到N). 第二行M(1<=M<

大北农偷窃商业机密团伙究竟想干什么?

不搞清楚某些基本概念,大北农偷窃商业机密团伙的问题说不清楚,比如,什么叫"自己能够产生杀虫剂"(Insecticide-producingcorn)的转基因玉米?这种玉米有什么价值?等等. 实际上,害虫的内脏是碱性环境,而人类的消化系统则是酸性的,人不是虫子.有一种叫"Bt"(简称)的细菌在虫子碱性消化系统里面产生一种蛋白质,被其他蛋白质分解为对于虫子而言是毒素(Toxin)的成分,从而麻痹虫子的消化系统,使其肠子内壁出现"孔洞"(Hole),使

长沙居家Spa卖淫团伙 25岁女子竟是幕后老板

据湖南经视报道,长沙最近出现一个居家SPA涉黄团伙,团伙老大竟是25岁年轻女子,这名女子对暗访记者称什么服务都有.http://www.ehotelier.cn/Thread.jsp?tid=182934http://www.ehotelier.cn/Thread.jsp?tid=182940http://www.ehotelier.cn/Thread.jsp?tid=182946http://www.ehotelier.cn/Thread.jsp?tid=182951http://www.eh

2817170358 18628256237 www.lvyouweibo.cn 诈骗团伙,受骗请加群136250179

2817170358  18628256237   www.lvyouweibo.cn  诈骗 18628256237   2817170358  三立达诈骗 近日一个诈骗团伙,借助销售三立达弓弩来实施诈骗. 诈骗手段分为2种,第一会要求打定金,一般打了定金就把你拉黑. 第二会在你打了定金之后给你物流发货到付款,包裹为一支劣质弩半成品,或者是单纯的铁矿来加重包裹,让其看起来像一把弩.从而吸引你付款签收.你要不签收或者要求验货签收则骗你定金,如果签收那就更惨了,你付的余款也被骗. 如果有已经上当的

大陆盗窃团伙被台北警方破获 在台专偷日本人

参考消息网4月1日报道 台媒称,陆客以商务考察名义来台,却行偷窃之实,台北市万华警方破获以四人为组的大陆籍扒手集团. 据台湾中时电子报4月1日报道,这个扒手团伙专挑日本旅客下手,来台短短几天就多次在龙山寺扒窃日本旅客的财物,专案小组埋伏多日,终于趁他们再度下手时出击,当场人赃俱获. 失窃的手提包里有大约16万日元,嫌犯还拿着被害人的信用卡到百货公司盗刷大买黄金,警方获报后立刻展开调查,当天就掌握嫌疑人是大陆籍身份. 嫌犯被逮,除了让日本旅客感受到台湾警方的破案效率,也博回台湾良好治安形象. ht