p1892[boi2003]团伙并查集(代码片段)

bxd123 bxd123     2022-12-02     650

关键词:

题目描述

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只有一行,表示最大可能的团伙数。

 

输入输出样例

输入样例#1: 复制
6
4
E 1 4
F 3 5
F 4 6
E 1 2
输出样例#1: 复制
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;
View Code

 






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 查看详情