关键词:
题目大意:有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,他们有些团伙之间有直接联系,,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了... 查看详情