记录编号 537064 评测结果 AAAAAAAAAA
题目名称 [HZOI 2016]犯罪团伙 最终得分 100
用户昵称 GravatarDeacep 是否通过 通过
代码语言 C++ 运行时间 0.049 s
提交时间 2019-07-09 10:53:53 内存使用 13.68 MiB
显示代码纯文本
//朋友的敌人不一定是敌人,因为敌人不一定是一个团伙,这样导致团伙数减小 
#include<bits/stdc++.h>
using namespace std;
int n;
struct person{
	int e,f;
}g[2001];
int Find(int x){
	if(g[x].f!=x)
	return g[x].f=Find(g[x].f);
	return x;
}
void Init(){
	for(int i=1;i<=n;i++){
		g[i].f=i;g[i].e=-1;
	}
}
void _union(int x,int y){
	if(Find(x)!=Find(y)) g[g[y].f].f=g[x].f;
}
bool vis[2001];
int main(){
	memset(vis,0,sizeof(vis));
	freopen("crime.in","r",stdin);
	freopen("crime.out","w",stdout);
	int m,p,q;
	cin>>n>>m;
	Init();
	char k;
	while(m--){
		cin>>k>>p>>q;
		if(k=='E'){
			if(g[p].e<0&&g[q].e<0){
				g[p].e=q;
				g[q].e=p;
			}
			else
			if(g[p].e<0&&g[q].e>0){
				_union(p,g[q].e);
				g[p].e=q;
			}
			else
			if(g[p].e>0&&g[q].e<0){
				_union(q,g[p].e);
				g[q].e=p;
			}
			else{
				_union(p,g[q].e);
				_union(q,g[p].e);
			}
		}
		else{
			_union(p,q);
//			if(g[p].e<0&&g[q].e>0)
//			g[p].e=g[q].e;
//			else
//			if(g[p].e>0&&g[q].e<0)
//			g[q].e=g[p].e;
//			else
//			if(g[p].e>0&&g[q].e>0)
//			_union(g[p].e,g[q].e);
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++){
//		cout<<i<<' '<<Find(i)<<endl;
		if(!vis[Find(i)]){
			vis[Find(i)]=1;
			ans++;
		}
	}
	cout<<ans;
	return 0;
}