洛谷p1892团伙(代码片段)

落月摇情满江树 落月摇情满江树     2022-10-29     498

关键词:

              洛谷 P1892 团伙

题目描述

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<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n, m, tot;
int fa[1005], foe[1005], ff[1005];
//fa[]记录每个人的上一层,foe[]记录每个人的敌人,ff[]记录有多少人是根
char c;
int find(int x)         //寻找根节点
    return fa[x]==x ? x : fa[x]=find(fa[x]);

void merge(int u, int v)         //merge 合并
    int x = find(u), y = find(v);
    if(x == y) return ;
    fa[x] = y;
    tot--;

int main() 
    int maxn = -1;
    scanf("%d%d", &n, &m);
    tot = n;        //突然发现这个好像没啥用qwq
    for(int i = 1; i <= n; i++) fa[i] = i;
    for(int i = 1; i <= m; i++) 
        cin >> c;
        int u, v;
        if(c == F)         //如果是朋友,直接合并
            scanf("%d%d", &u, &v);
            merge(u, v);
        
        if(c == E)         //分别寻找每个人是否有另一个敌人,然后进行合并
            scanf("%d%d", &u, &v);
            if(foe[u] != 0) merge(v, foe[u]);
            if(foe[v] != 0) merge(u, foe[v]);
            foe[u] = v; foe[v] = u;
        
    
    for(int i = 1; i <= n; i++) 
        int t = find(fa[i]);
        ff[t]++;        //寻找有哪些人作为根节点
        if(t > maxn) maxn = t;
    
    int sum = 0;
    for(int i = 1; i <= maxn; i++) if(ff[i] != 0) sum++;        //计数
    printf("%d", sum);
    return 0;

 


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

...我的朋友;我敌人的敌人也是我的朋友。两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。输入输出格式输入格式: 输入文件gangs.in的第一行是一个整数N(2<... 查看详情

解题报告:luogup1892(代码片段)

题目链接:P1892[BOI2003]团伙最近懒死了。和P1525关押罪犯和相似,也要有一个记录敌人信息的数组。这里对这个数组有个好些的理解:记录敌人集合中的任意一个,由于并查集的性质,其他的也随之确定。注意的是,在两个团伙... 查看详情

团伙封锁阳光大学(代码片段)

团伙#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( 查看详情

题解团伙(代码片段)

...是我的朋友;    所有是朋友的人组成一个团伙。告诉你关于这n个人的m条信息,即某两个人是朋友,或 查看详情

题解打击犯罪(代码片段)

...目描述    某个地区有n(n≤1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1至n,他们有些团伙之间有直接联系,,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了... 查看详情

codevs5971打击犯罪(代码片段)

题目描述Description  某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了一个... 查看详情

动规(18)-并查集基础题——团伙(代码片段)

...我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这N个人的M条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能 查看详情

动规(18)-并查集基础题——团伙(代码片段)

...我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这N个人的M条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能 查看详情

动规(20)-并查集基础题——打击犯罪(代码片段)

【问题描述】  某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形... 查看详情

动规(20)-并查集基础题——打击犯罪(代码片段)

【问题描述】  某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形... 查看详情

动规(20)-并查集基础题——打击犯罪(代码片段)

【问题描述】  某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形... 查看详情

bzoj1370:[baltic2003]gang团伙(luogu1892)(种类并查集)(代码片段)

题面:  bzoj题面有误,还是看luogu的吧  https://www.luogu.org/problemnew/show/P1892题解:  种类并查集。。  因为有敌人的敌人是朋友这个条件,所以需要一个中转点。。  因此,将每个点拆成两个点,一个是朋友点,另一... 查看详情

真·抢显卡!四川一团伙持40cm长刀入室抢劫50余张显卡,总价值超10万元(代码片段)

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇来源:量子位QbitAI这年头,有显卡也能招来祸事了???没错,不仅可能被入室抢劫,而且还会受到持刀威胁。别不信,... 查看详情

洛谷2458(代码片段)

f[now][0]表示以当前点为根,且要取该点,满足条件的最小#include<cstdio>#include<cctype>#include<cstring>#include<algorithm>usingnamespacestd;inthead[1501],to[1501],nex[1501],val[1501],indg[1501],f[150 查看详情

洛谷3348(代码片段)

可持久化线段树模板1.结构体的打法#include<cstdio>#include<cctype>#include<algorithm>usingnamespacestd;constintmaxn=200010;structdataintl,r,sz;tr[maxn<<5];intn,m,cnt,key,a[maxn],rk[maxn],id[m 查看详情

求细胞数量-洛谷(代码片段)

求细胞数量-洛谷法1:BFS#include<iostream>#include<cstdio>usingnamespacestd;intdx[4]=-1,0,1,0;intdy[4]=0,1,0,-1;//左、右、上、下intbz[100][100],num=0,n,m;voiddoit(intp,intq)intx,y,t,w,i; 查看详情

洛谷p1535游荡的奶牛(代码片段)

P1535游荡的奶牛题目描述Searchingfortheverybestgrass,thecowsaretravellingaboutthepasturewhichisrepresentedasagridwithNrowsandMcolumns(2<=N<=100;2<=M<=100).KeenobserverFarmerJohnhasrecordedBessie‘spo 查看详情

洛谷p1816忠诚(代码片段)

https://www.luogu.org/problemnew/show/1816st表模板#include<cstdio>#include<algorithm>usingnamespacestd;typedeflonglongLL;LLm,n;LLa[100100],d[100100][20];intmain()LLi,j,l,r,k;scanf("%lld%lld" 查看详情