首页 > 其他分享 >【模板】并查集 (洛谷P3367)

【模板】并查集 (洛谷P3367)

时间:2023-11-21 22:57:27浏览次数:28  
标签:pre 10 ch 洛谷 int 查集 read P3367 节点

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 template <class T>
 4 inline void read(T &s)
 5 {
 6     s = 0;
 7     int w = 1;
 8     char ch = getchar();
 9     while (ch < '0' || ch > '9')
10     {
11         if (ch == '-')
12             w = -1;
13         ch = getchar();
14     }
15     while (ch >= '0' && ch <= '9')
16     {
17         s = s * 10 + (ch ^ '0');
18         ch = getchar();
19     }
20     s *= w;
21 }
22 
23 template <class T>
24 inline void write(T x)
25 {
26     if (x < 0){
27         putchar('-');
28         x = -x;
29     }
30     if (x > 9)
31         write(x / 10);
32     putchar(x % 10 + '0');
33 }
34 const int N = 2e5 + 3;
35 int n, m, pre[N];
36 int find(int x) // 路径压缩 + 找到根节点
37 {
38     if(pre[x] != x) pre[x] = find(pre[x]); 
39     // 将x向上查找根节点过程中走过的所有点的父节点都标记为x对应的根节点,路径压缩
40     return pre[x];
41 }
42 int main()
43 {
44     read(n), read(m);
45     for(int i = 1; i <= n; ++i) pre[i] = i;
46     while(m--){
47         int z, x, y;
48         read(z), read(x), read(y);
49         switch(z){
50             case 1:
51                 pre[find(x)] = find(y); // 将x对应的根节点合并为y对应的根节点的儿子
52                 // pre[x的根节点] = y的根节点
53                 break;
54             case 2:
55                 if(find(x) == find(y)) puts("Y");
56                 else puts("N");
57                 break;
58         }
59     }
60    // system("pause");
61    return 0;
62 }

 

标签:pre,10,ch,洛谷,int,查集,read,P3367,节点
From: https://www.cnblogs.com/nijigasaki14/p/17847824.html

相关文章

  • 【模板】线段树1(洛谷P3372)
    1#include<iostream>2#include<cstdio>34usingnamespacestd;56template<classT>7inlinevoidread(T&s)8{9s=0;10intw=1;11charch=getchar();12while(ch<'0�......
  • 【树链剖分】P3401 洛谷树 题解
    P3401考虑先将路径权值进行转化,因为很难对路径直接进行统计。考虑如何表示出这条路径的权值。记\(s_i=\oplus_{j\in\text{path}(1,i)}w_j\),其中\(\text{path}(i,j)\)表示\(i\)到\(j\)的路径上的边集。则\(u\tov\)的路径的权值为\(s_u\opluss_v\)。现在转变为......
  • 带权并查集
    很新奇啊这个东西。用来解决形如\(x_i-x_j=y\)系列方程组有无解的问题。思路很简单,\(dis_i\)代表从\(i\)的祖先与\(i\)之间的差值。这样能秒算出方程组中任意两个点的差值。本质是每次把两个方程组合并。找祖先部分:intfindpa(intx){ if(fa[x]!=x){ int......
  • 并查集学习笔记
    简介这里引用OI-wiki上的内容:并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素。顾名思义,并查集支持两种操作:合并(Union):合并两个元素所属集合(合并对应的树)查询(Find):查询某个元素所属集合(查询对应的树的根节点),......
  • 并查集
    多少张桌子时间限制:2000/1000MS(Java/其他)内存限制:65536/32768K(Java/其他)问题描述今天是伊格内修斯的生日。他邀请了很多朋友。现在是晚餐时间。伊格内修斯想知道他至少需要多少张桌子。你必须注意,并不是所有的朋友都认识对方,所有的朋友都不想和陌生人呆在一起。这个问题的......
  • 洛谷P8612 取宝
    经典的记忆化搜索,一开始因为最后的答案忘记加取模卡了半天,真是愚蠢至极。#include<iostream>#include<algorithm>#include<stdio.h>#include<stdlib.h>#include<cstring>usingnamespacestd;constintN=55,mod=1e9+7;intf[N][N][15][15];//横坐标纵......
  • 洛谷P8602 大臣的旅费
    这道题既可以用图论多次求单源最短路暴力来做,也可以用正解:求树的直径来做。#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<iostream>#include<vector>usingnamespacestd;typedeflonglongll;constintN=1e5+5,M=N<<1;in......
  • 【洛谷 P1125】[NOIP2008 提高组] 笨小猴 题解(字符串+映射+集合)
    [NOIP2008提高组]笨小猴题目描述笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设是单词中出现次数最多的字母的出现次数,是单词中出现次数最少的字母的出现次数,......
  • 洛谷B2017 打印 ASCII 码(Python3)
    要点:1.Python的input()默认要换行,而在输入的时候即使只输了一个字符,也会被判定为输入两个字符。故此处要么只取字符串的第一位,要么在输入时用.strip()来删去首位字符,strip的介绍在这里2.Python中不能用强制类型转换来得到ASCII码,需要用到ord()函数。ord():括号内的字符的ASCI......
  • 洛谷B2016 浮点数向零舍入(Python3)
    要点:1.有正有负怎么办?正负分开写?如果只看数字部分,那取整的方式是一样的。所以我们可以先输出符号,把问题全都转化到非负数集中。2.如何取整?此处取整为向下取整。而强制类型转换把浮点数转化为整型数的时候是把小数部分全部去掉,而不是四舍五入,与题中取整方式相符,故可直......