记录编号 |
537064 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HZOI 2016]犯罪团伙 |
最终得分 |
100 |
用户昵称 |
Deacep |
是否通过 |
通过 |
代码语言 |
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;
}