关键词:
题目描述
1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:
我朋友的朋友是我的朋友;
我敌人的敌人也是我的朋友。
两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。
输入输出格式
输入格式:
输入文件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是敌人。输入数据保证不会产生信息的矛盾。
输出格式:
输出文件gangs.out只有一行,表示最大可能的团伙数。
输入输出样例
6 4 E 1 4 F 3 5 F 4 6 E 1 2
3
维护敌人的敌人是朋友
#include<bits/stdc++.h> using namespace std; //input by bxd #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define repp(i,a,b) for(int i=(a);i>=(b);--i) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m) #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s); #define ll long long #define pb push_back #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) ////////////////////////////////// #define inf 0x3f3f3f3f const int N=100000+5; int f[N]; int find1(int x) return f[x]==x?x:f[x]=find1(f[x]); struct node int x,y,v; s[N]; bool cmp(node a,node b) return a.v>b.v; void union1(int x,int y) int a=find1(x); int b=find1(y); if(a!=b) f[a]=b; int vis[N]; int main() int n,m; RII(n,m); rep(i,1,n)f[i]=i; char s[2]; int a,b; rep(i,1,m) RS(s);RII(a,b); if(s[0]==‘F‘) union1(a,b); else if(!vis[a])vis[a]=b; else union1(vis[a],b); if(!vis[b])vis[b]=a; else union1(vis[b],a); int cnt=0; rep(i,1,n) if(f[i]==i) cnt++; cout<<cnt; return 0;
bzoj1370:[baltic2003]gang团伙(luogu1892)(种类并查集)(代码片段)
题面: bzoj题面有误,还是看luogu的吧 https://www.luogu.org/problemnew/show/P1892题解: 种类并查集。。 因为有敌人的敌人是朋友这个条件,所以需要一个中转点。。 因此,将每个点拆成两个点,一个是朋友点,另一... 查看详情
并查集bzoj1370-[baltic2003]gang团伙
...2、我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这n个人的m条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能有多少个团伙?【思路】水………... 查看详情
bzoj1370[baltic2003]gang团伙:并查集虚点
...我敌人的敌人是我的朋友。 所有是朋友的人组成一个团伙。 告诉你关于这n个人的m条信息,即某两个人是朋友,或者某两个人是敌人。 请你编写一个程序,计算出这 查看详情
洛谷p1892团伙(代码片段)
洛谷P1892团伙题目描述1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:我朋友的朋友是我的朋友;我敌人的敌人也是我的... 查看详情
动规(18)-并查集基础题——团伙(代码片段)
...我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这N个人的M条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能 查看详情
动规(18)-并查集基础题——团伙(代码片段)
...我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这N个人的M条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能 查看详情
解题报告:luogup1892(代码片段)
题目链接:P1892[BOI2003]团伙最近懒死了。和P1525关押罪犯和相似,也要有一个记录敌人信息的数组。这里对这个数组有个好些的理解:记录敌人集合中的任意一个,由于并查集的性质,其他的也随之确定。注意的是,在两个团伙... 查看详情
动规(20)-并查集基础题——打击犯罪(代码片段)
【问题描述】 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形... 查看详情
动规(20)-并查集基础题——打击犯罪(代码片段)
【问题描述】 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形... 查看详情
动规(20)-并查集基础题——打击犯罪(代码片段)
【问题描述】 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形... 查看详情
[并查集]团伙
题号:ZHOJ1258思路:并查集。给每个人建立一个“正集”(朋友)、一个“反集”(敌人),反集要么为空、要么指向一个正集,维护这两类集合,最后统计“正集”的个数。1#include<cstdio>2#include<cstring>... 查看详情
并查集团伙
[codevs2597]团伙 时间限制:1s 空间限制:128000KB 题目等级:黄金Gold 题目描述 Description1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:... 查看详情
团伙(并查集经典)
...bsp;2.我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这N个人的M条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能有多少个团伙?方法:1#include<cstdio>2#inc... 查看详情
续并查集学习笔记——gang团伙题解
...2、我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这n个人的m条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能有多少个团伙?Input第1行为n和m,N小于1000,M小... 查看详情
poj1611thesuspects[并查集](代码片段)
题目Severeacuterespiratorysyndrome(SARS),anatypicalpneumoniaofunknownaetiology,wasrecognizedasaglobalthreatinmid-March2003.Tominimizetransmissiontoothers,thebeststrategyistoseparatethesuspectsfromothers 查看详情
动规(18)-并查集基础题——团伙
...我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这N个人的M条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能 查看详情
[qbzt寒假]并查集(代码片段)
并查集:(Kruscal),(Tarjan)求(LCA)分类并查集:食物链,团伙(敌人的敌人是我的朋友)带权并查集:(SDOI2016)齿轮(可用intfather(intx)returnfa[x]==x?x:fa[x]=father(f[x]);Luogu3101滑雪等级[]建边:任意相邻两格子之间建边,权值为海拔差将边... 查看详情
uva-1197(简单并查集计数)(代码片段)
Severeacuterespiratorysyndrome(SARS),anatypicalpneumoniaofunknownaetiology,wasrecognizedasaglobalthreatinmid-March2003.Tominimizetransmissiontoothers,thebeststrategyistoseparatethesuspectsfromothers.I 查看详情