首页 > 其他分享 >C123【模板】扩展域并查集 P1892 [BOI2003] 团伙

C123【模板】扩展域并查集 P1892 [BOI2003] 团伙

时间:2024-05-20 21:29:33浏览次数:9  
标签:int 查集 P1892 BOI2003 include find unset

视频链接:C123【模板】扩展域并查集 P1892 [BOI2003] 团伙_哔哩哔哩_bilibili

 

 

P1892 [BOI2003] 团伙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

// 扩展域并查集 
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int n,m,a,b,s;
int p[2005];

int find(int x){
  return p[x]==x?x:p[x]=find(p[x]);
}
void unset(int x,int y){
  p[find(y)]=find(x);
}
int main(){
  cin>>n>>m;
  for(int i=1;i<=2*n;i++) p[i]=i;
  for(int i=1;i<=m;i++){
    char ch; cin>>ch>>a>>b;
    if(ch=='F') unset(a,b);
    else unset(a,b+n),unset(b,a+n);
  }
  for(int i=1;i<=n;i++)if(p[i]==i)s++;
  cout<<s;
}

 

P1525 [NOIP2010 提高组] 关押罪犯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

// 扩展域并查集 
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

struct E{
  int a,b,c;
  bool operator<(const E &t)const{
    return c>t.c; //降序
  }
}e[100005];
int n,m,p[40005];

int find(int x){
  return p[x]==x?x:p[x]=find(p[x]);
}
void unset(int x,int y){
  p[find(y)]=find(x);
}
int main(){
  cin>>n>>m;
  for(int i=1;i<=m;i++)
    cin>>e[i].a>>e[i].b>>e[i].c;
  sort(e+1,e+m+1);
  for(int i=1;i<=n*2;i++) p[i]=i;
  for(int i=1; i<=m; i++){
    int a=e[i].a,b=e[i].b;
    if(find(a)==find(b)){
      cout<<e[i].c; return 0;
    }
    unset(a,b+n);
    unset(b,a+n);
  }
  cout<<0;
}

 

标签:int,查集,P1892,BOI2003,include,find,unset
From: https://www.cnblogs.com/dx123/p/18199732

相关文章

  • 【并查集】冗余连接
    冗余连接如果两个顶点属于相同的连通分量,则说明在遍历到当前的边之前,这两个顶点之间已经连通,因此当前的边导致环出现,为附加的边,将当前的边作为答案返回PythonclassSolution:deffindRedundantConnection(self,edges:List[List[int]])->List[int]:n=len(ed......
  • 【图的连通性】【并查集】【拓扑排序】
    在图论中,不同类型的图(无向图和有向图)需要使用不同的算法和数据结构来处理它们的特性和问题。这里我们将讨论如何使用并查集来解决无向图的连通性问题,以及如何使用深度优先搜索(DFS)、广度优先搜索(BFS)和拓扑排序来解决有向图中的依赖性问题。无向图的连通性:并查集对于无向图的连通......
  • [LeetCode] 1584.连接所有点的最小费用 Kruskal And Prim 算法 Java 并查集
    Problem:1584.连接所有点的最小费用目录Kruskal算法复杂度CodePrim算法复杂度CodeKruskal算法复杂度时间复杂度:添加时间复杂度,示例:$O(mlog(m))$空间复杂度:添加空间复杂度,示例:$O(n)$CodeclassSolution{publicintminCostConnectPoints(int[][]po......
  • 并查集
    并查集并查集模板包含路径压缩+小挂大constintMAXN=1e5+1;intfather[MAXN];//存父亲节点father[1]=2指的是1节点的父亲为2intsize[MAXN]; //存每个集合的大小intstack[MAXN];//intn;//建立并查集voidbuild(){ for(inti=0;i<=n;i++)......
  • hdu1213并查集
    第一种方法是定义每个数的老大是其自身,通过每次输入的两个数,找到它两的老大,比较大小,循环将所有大的那个老大改为小的那个数,最后输出有几个老大是其自身,案例都能过,提交就错,不知错哪了......点击查看代码importjava.util.Scanner;publicclasshdu1213{ publicstaticvoid......
  • 边权并查集之奇偶游戏
    题目传送门:https://www.acwing.com/problem/content/241///懒得手敲题目先给一下题解:#include<iostream>#include<unordered_map>//这个题目有两个点要想明白,一个是点到根的距离标志着这个点的性质,且在路径压缩的过程中此点不会改变//第二点就是在出现新的关系,也就是要将两......
  • [算法学习笔记] 并查集
    提示:本文并非并查集模板讲解,是在模板基础上的进一步理解以及拓展。Review并查集可以用来维护集合问题。例如,已知\(a,b\)同属一个集合,\(b,c\)同属一个集合。那么\(a,b,c\)都属一个集合。并查集分为合并,查询操作。定义\(fa_i\)表示点\(i\)的父亲。为了降低复杂度,在fi......
  • 并查集
    1.0并查集概念对于具有传递性质、联通集合的题目可以考虑并查集。1.1并查集模板声明:以下模板来自于https://xuq7bkgch1.feishu.cn/docx/CAbedNJ5KobvinxdyKgcKsrlnrd。有n个数,编号是1~n,最开始每个数各自在一个集合中,现在要进行m个操作,操作共有两种:1.Mab,将编号为a......
  • 528. 奶酪(并查集orBFS)
    题面如下:https://www.acwing.com/problem/content/530/大致思路是:合并所有连接的空洞,判断下表面的空洞和上表面的空洞是否是同一集合集合#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>usingnamespacestd;constintN......
  • 倍增并查集
    如果你既会倍增,又会并查集,那你一定会倍增并查集吧!link数据范围明示\(O(n^2)\)无法通过。众所周知,倍增是\(O(\logn)\)的,并查集近似\(O(n)\)的,它们结合一下不就能过了吗?先来重新考虑一下倍增的本质。倍增倍增最经典的用法是ST表。我们将一个区间拆成两个长为\(2^k\)......