2597 团伙

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 黄金 Gold

传送门

题目描述 Description

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

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

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

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

输入描述 Input Description

输入文件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 Description

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

样例输入 Sample Input

6

4

E 1 4

F 3 5

F 4 6

E 1 2

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

2<=N<=1000

1<=M<=5000

1<=p q<=N

分类标签 Tags

并查集 树结构

/*
并查集.
朋友直接建立关系.
敌人间接建立关系(关系是双向的).
一开始用n^2查询然后其实o(n)完全阔以.
(关押罪犯类似).
*/
#include<iostream>
#include<cstdio>
#define MAXN 1001*20
using namespace std;
int father[MAXN],n,m,tot;
bool b[MAXN];
int read(){
int x=0,f=1;char ch;ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
int find(int x){
return x!=father[x]?father[x]=find(father[x]):x;
}
int main(){
int x,y;char ch;
n=read();
m=read();
for(int i=1;i<=2*n;i++) father[i]=i;
for(int i=1;i<=m;i++)
{
cin>>ch;x=read();y=read();
int l1=find(x),l2=find(y);
if(ch=='F') if(l1!=l2) father[l2]=l1;
if(ch=='E') father[l2]=find(x+n),father[l1]=find(y+n);
}
for(int i=1;i<=n;i++)
{
int l1=find(i);
if(!b[l1]) b[l1]=true,tot++;
}
printf("%d",tot);
return 0;
}

Codevs 2597 团伙(并查集)的更多相关文章

  1. BZOJ 1370: [Baltic2003]Gang团伙 [并查集 拆点 | 种类并查集WA]

    题意: 朋友的朋友是朋友,敌人的敌人是朋友:朋友形成团伙,求最多有多少团伙 种类并查集WA了一节课,原因是,只有那两种关系才成立,诸如朋友的敌人是朋友之类的都不成立! 所以拆点做吧 #include ...

  2. [BZOJ1370][Baltic2003]Gang团伙 并查集+拆点

    Description 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: 1. 我朋友的朋友是我的朋友: 2. 我敌人的敌人是我的朋友: 所有是朋友的人组成一个团伙.告诉你关于这n个 ...

  3. codevs 1073 家族 并查集

    家族 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1073/ Description 若某个家族 ...

  4. 【bzoj1370】[Baltic2003]Gang团伙 并查集

    题目描述 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: 1. 我朋友的朋友是我的朋友: 2. 我敌人的敌人是我的朋友: 所有是朋友的人组成一个团伙.告诉你关于这n个人的m条信息, ...

  5. codevs 2597 团伙

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么 ...

  6. P1892 [BOI2003]团伙 并查集

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

  7. codevs 2597 团伙x

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

  8. [codevs2597]团伙<并查集>

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

  9. AC日记——舒适的路线 codevs 1001 (并查集+乱搞)

    1001 舒适的路线 2006年  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description Z小镇是 ...

随机推荐

  1. HW4.2

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  2. HDOJ-ACM1006(JAVA)

    题意:输入一个角度degree,求出一天中时针分针秒针之间的角度大于这个角度degree的时间占一天总时间的比例 因此输入是0-120度, 输出比例,保留三位小数,-1为终止 暂时没想出来如何做这道题 ...

  3. libmad和libmpg123解码mp3在安卓手机上的比较

    libmad和libmpg123解码mp3在安卓手机上的比较1. libmad 选自 http://sourceforge.net/projects/mad  libmad-0.15.1b.tar.g ...

  4. CentOS搭建VSFTP

    1.先看看有没有安装 rpm -qa | grep vsftpd 如果没有提示,说明没有安装.接下来,我们安装一个ftp. 2.yum安装vsftpd: yum -y install vsftpd 安 ...

  5. mongodb的查询操作符

    本文地址:http://www.cnblogs.com/egger/archive/2013/05/04/3059374.html   欢迎转载 ,请保留此链接! 官方参考: http://docs. ...

  6. [网络]让局域网的电脑通过路由的公网ip可以被访问到的设置

    http://公网IP:服务端口/访问路径(http://110.16.166.135:8081/pra/unionpay/v_asyn_notify.jspx这个地址就会通过公网ip来访问到你的ip ...

  7. Mybatis上路_05-使用命令行自动生成

    http://my.oschina.net/vigiles/blog/125127 目录[-] 1.数据准备: 1)建库: 2)建表: 3)预设数据: 2.编写Generator执行配置文件: 3.搭 ...

  8. mysql字符串分割函数(行转列)

    由于工作需要需要处理一些以逗号分隔的字符串,每次都要现做很是麻烦,网上找了很多都没有现成的,好吧,自己动手写一个好了 )) ) BEGIN /*函数功能: 把带逗号的字符串分割取出 参数: num 要 ...

  9. hadoop备记

    Hadoop 的优势 Hadoop 是 一 个 能 够 让 用 户 轻 松 架 构 和 使 用 的 分 布 式 计 算 平 台. 用 户 可 以 轻 松 地 在Hadoop 上开发执行处理海量数据的应 ...

  10. Oracle VM Virtual 下CentOS不能自动获取IP地址

    在CentOS配置网卡开机自动获取IP地址: vi /etc/sysconfig/network-scripts/ifcfg-eth0 将 ONBOOT="no" 改为 ONBOO ...