首页 > 其他分享 >P1892

P1892

时间:2024-10-22 11:11:58浏览次数:7  
标签:return hebing int enm P1892 else find

酷狗没会员了QAQ

#include<bits/stdc++.h>
using namespace std;
int n,m,f[1001],enm[1001];  
int find(int x)           {
    if(f[x]!=x) x=find(f[x]);
    return x;
}
void hebing(int x,int y)    {
    x=find(x);y=find(y); 
    if(x==y) return;
    f[y]=x;
    return;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)f[i]=i;
    for(int i=1;i<=m;i++){
        int p,q;
        char c;
        cin>>c>>p>>q;
        if(c=='F') hebing(p,q);   
        else {
            if(enm[p]==0) enm[p]=find(q);
            else hebing(q,enm[p]); 
            if(enm[q]==0) enm[q]=find(p);
            else hebing(p,enm[q]);
        } 
    }
    int count[1001]={0};
    for(int i=1;i<=n;i++)count[find(i)]++;
    int cnt=0;
    for(int i=1;i<=n;i++)if(count[i]) cnt++; 
    cout<<cnt;
 }

标签:return,hebing,int,enm,P1892,else,find
From: https://www.cnblogs.com/zan-mei-tai-yang/p/18492201

相关文章

  • 洛谷 P1892 [BOI2003] 团伙
    P1892[BOI2003]团伙种类并查集!!!!存敌人主要要理解敌人的敌人就是朋友这句话,我们就可以用并查集来维护朋友,用一个数组来储存他的其中一个敌人,后面遇到其他他的敌人时,将他的敌人用并查集连起来成为朋友。注意这题要你输出团队数而不是团队的人数不会就我这么唐吧。#include<bi......
  • C123【模板】扩展域并查集 P1892 [BOI2003] 团伙
    视频链接:C123【模板】扩展域并查集P1892[BOI2003]团伙_哔哩哔哩_bilibili  P1892[BOI2003]团伙-洛谷|计算机科学教育新生态(luogu.com.cn)//扩展域并查集#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;intn,m,a,b,......
  • 洛谷题单指南-集合-P1892 [BOI2003] 团伙
    原题链接:https://www.luogu.com.cn/problem/P1892题意解读:此题与关押罪犯问题非常像,本质上就是要合并所有的朋友。解题思路:首先,初始化并查集;对于每一对人的关系,如果是朋友,直接进行合并;如果是敌人,先查看双方之前是否有记录其他敌人,如果有,则将一方与另一方的敌人进行合并,如果没......
  • 并查集(反集)进阶 P1892 [BOI2003] 团伙
    现在有 n 个人,他们之间有两种关系:朋友和敌人。我们知道:一个人的朋友的朋友是朋友一个人的敌人的敌人是朋友现在要对这些人进行组团。两个人在一个团体内当且仅当这两个人是朋友。请求出这些人中最多可能有的团体数。输入格式第一行输入一个整数 n 代表人数。第二行......
  • 并查集与反集——P1892团伙
    并查集并查集如其名,合并与查找查找intfind(intkey){ if(fa[key]==key)returnkey; elsereturnfa[key]=find(fa[key]);}合并voidunite(intx,inty){ intfax=find(x); intfay=find(y); fa[fax]=fay; return;}反集处理并查集合并问题的敌对/......