P1892 团伙

Posted ukcxrtjr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1892 团伙相关的知识,希望对你有一定的参考价值。

题面:https://www.luogu.org/problemnew/show/P1892

本题可以把朋友并在一起,用一个数组记录敌人,然后把敌人的敌人和自己并在一起即可。

Code:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<ctime>
using namespace std;
int n,m,i,ans,a,b,f[500005],s[500005];
char c;
int find(int x)
    if(f[x]==0)
        return x;
    
    else
        return f[x]=find(f[x]);
    

void unionn(int a,int b)
    int l=find(a);
    int r=find(b);
    if(l!=r)
        f[l]=r;
    

int main()
    cin>>n>>m;
    for(i=1;i<=m;i++)
        cin>>c>>a>>b;
        if(c==‘F‘)
            unionn(a,b);
        
        if(c==‘E‘)
            if(s[a]!=0)
                unionn(s[a],b);
            
            if(s[b]!=0)
                unionn(s[b],a);
            
            s[a]=b;
            s[b]=a;
        
    
    for(i=1;i<=n;i++)
        if(f[i]==0)
            ans++;
        
    
    cout<<ans<<endl;
    exit(0);

以上是关于P1892 团伙的主要内容,如果未能解决你的问题,请参考以下文章

[洛谷P1892]团伙

P1892 [BOI2003]团伙 并查集

解题报告:luogu P1892

3/25《并查集》

codevs 2597 团伙

2597 团伙