ICode9

精准搜索请尝试: 精确搜索
  • 并查集 1.判断成环否2022-05-15 14:32:35

    注意输入!! 并查集 注意更改合并根节点数量 要先更改数量 然后再合并结点 tle 请看看自己查父函数有没有return 或者使用 int find(int x)//找到x的祖宗节点。 { if(x!=p[x]) p[x]=find(p[x]); return p[x]; }//这样写对查询的某个点 进行了转化p[x]=根节点 集合的数量 在根节点上保

  • C. Tokitsukaze and Two Colorful Tapes_并查集+环2022-05-13 12:02:17

    C. Tokitsukaze and Two Colorful Tapes_并查集+环 题目大意 给ab两个数组,他们均是n的排列。现在要在满足原来ai==bj的仍旧相等的条件下,重新排列ab,使得sum(abs(ai-bi))最大。 思路和代码 比较好看的就是这是一堆环。我们贪心的去给每个环一大一小的去分配数字即可。要注意其实奇数

  • 图论之并查集2022-05-10 09:03:41

    最近刚刚学习完并查集,有感而发。 这篇仅仅是讲述基础的并查集,不带权值之类的东西。 首先是“查”的操作find()函数 int find(int x) { if(fa[x]==x) { return fa[x]=x; } else return fa[x]=find(fa[x]); } 其中,fa便是表示祖先。 使用递归算法(不用

  • C. Where is the Pizza?_并查集2022-05-07 01:32:49

    C. Where is the Pizza? 题目大意: 给a,b两个数列,他们均是n的排列。ci=ai/bi(ci是ai bi中的一个)现在给出部分c数列,问c数列又多少种可能性。 思路和代码: 题目样例给的比较好啊 首先对在aibi之间建边,可以明确的是所得的图一定是若干个环。 一个环中只要有一个节点确定那么整个环就确定

  • 欧拉路径的判断(并查集,DFS)2022-05-06 23:02:33

    题目 我的题解 点击查看代码 #include<bits/stdc++.h> using namespace std; int main() { map<int, int>mp; int n, m; cin >> n >> m; for (int i = 1;i < n+1;i++) { mp.insert(pair<int, int>(i, 0)); } for (map<

  • SDUTOJ 2021级ACM班&2022年寒假集训《数据结构》专题11--最小生成树、并查集2022-05-06 20:33:23

    A - 小雷的冰茶几 题目链接 https://acm.sdut.edu.cn/onlinejudge3/contests/3989/problems/A 并查集。一共需要搬动的次数,即,一共有几个集合。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int t,n,k,x,y; 4 int p[100010]; 5 6 void Init(int n) 7 { 8 f

  • 947. 移除最多的同行或同列石头(并查集)2022-05-05 03:31:07

    947. 移除最多的同行或同列石头 n 块石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。 如果一块石头的 同行或者同列 上有其他石头存在,那么就可以移除这块石头。 给你一个长度为 n 的数组 stones ,其中 stones[i] = [xi, yi] 表示第 i 块

  • 1202. 交换字符串中的元素(并查集)2022-05-05 02:31:45

    1202. 交换字符串中的元素 给你一个字符串 s,以及该字符串中的一些「索引对」数组 pairs,其中 pairs[i] = [a, b] 表示字符串中的两个索引(编号从 0 开始)。 你可以 任意多次交换 在 pairs 中任意一对索引处的字符。 返回在经过若干次交换后,s 可以变成的按字典序最小的字

  • 778. 水位上升的泳池中游泳(并查集)2022-05-05 00:03:14

    778. 水位上升的泳池中游泳 在一个 n x n 的整数矩阵 grid 中,每一个方格的值 grid[i][j] 表示位置 (i, j) 的平台高度。 当开始下雨时,在时间为 t 时,水池中的水位为 t 。你可以从一个平台游向四周相邻的任意一个平台,但是前提是此时水位必须同时淹没这两个平台。假定

  • leetcode(c++)(并查集)2022-05-03 20:33:55

    #include <iostream> #include <vector> using namespace std; class DSU{ public: vector<int>parent; DSU(int n) { parent = vector<int>(n); for(int i = 0; i< n; ++i) { parent[i] =

  • 关于并查集2022-05-03 20:03:47

    并查集,顾名思义,就是合并、查找集合: 对于一个集合S={a1, a2, ..., an-1, an},我们还可以对集合S进一步划分: S1,S2,...,Sm-1,Sm。我们希望能够快速确定S中的两两元素是否属于S的同一子集。 主要是两个操作: 1、Find:查找元素所属集合 2、Union:合并两个集合成一个新的集合   基本解析:

  • 并查集的高级应用2022-05-01 23:03:16

    1 给定一个 n×m 的矩阵,其中 q 个位置已经被填充。 2 有一条规则,如果 (r1,c1)(r1,c1) ,(r1,c2)(r1,c2),(r2,c1)(r2,c1) 均被填充,则 (r2,c2)(r2,c2) 也被填充。任何被其他三个位置生成的位置,也可以继续生成其他位置。问最少需要再人为填充多少元素,使矩阵被填满。 3 The first line c

  • 399. 除法求值(并查集)2022-04-29 22:04:31

    399. 除法求值 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。 另有一些以数组 queries 表示的问题,其中 

  • 并查集详解 图解引入到实现| Disjoint Sets details, intro to implementation with figures.2022-04-28 14:34:37

    Introduction of Disjoint Sets It's easy to tell whether someone you know is your relative. He or she may be your uncle, grandparent or nephew. Because your blood relationship is within two or three generations. Consider such a scenario, you meet some

  • acw4412. 构造数组-区间合并or并查集2022-04-25 10:35:17

    4412. 构造数组-区间合并or并查集 题目大意: 有两个数列,给数列a和b,a已知,b未知。若ai==aj则表示在b数列中[i,j]区间所有数相等。现在b[0]=0,问b数组有多少种可能。 思路和代码: 比较好想,只要看a有几个区间,答案就是2^(x-1)。 这题给出两种做法,区间合并和并查集 //区间合并做法 /* 先对

  • 并查集2022-04-25 10:35:07

    547. 省份数量 - 力扣(LeetCode) (leetcode-cn.com) 1 class Solution { 2 public: 3 vector<int>father; 4 int find(int x){ 5 if(father[x]==x) 6 return x; 7 return find(father[x]); 8 } 9 void tunion(int a,i

  • AcWing 4412. 构造数组2022-04-24 13:32:10

    AcWing 4412. 构造数组(三种解法) 思路分析 经分析可得, \[若a_i = a_j,则 b_i <= b_{i + 1} <= ... <= b_j\\ 又\because b_i=b_j\,\,\,\therefore b_i = b_{i + 1} = ... = b_j \]所以只需要去统计有多少个这样的区间,然后乘2即可(因为每一个区间都有两种选择) 法一:区间合并 基础 防止

  • 并查集2022-04-17 20:01:03

    并查集:主要用来判断两个数据是否在同一组,并能对两个不同的树进行合并成一组的一种数据结构 其实现的核心方式就是:两个在同一组的节点有着相同的祖先节点。   代码实现及解析: 1 public class UnionFind { 2 public int[] fa;//用来存储每个节点的祖先(相同组的成员具有相同

  • LCA 22022-04-17 18:31:58

    主要内容是LCA的板子 1.倍增LCA 原理:尝试法,二进制划分和倍增 打法: 1.首先预处理每个节点在整棵树中的深度和关键信息 2.对于节点x,预处理每个2的j次方所能到达的点,这里递归变递推 3.询问lca的时候,首先调整节点的深度,较深的节点走到与较浅节点同深度位置 4.如果y走到x的位置,那么返回

  • 并查集模板 (洛谷p3367题解)2022-04-17 11:02:07

        #include<bits/stdc++.h>using namespace std;const int maxn = 10005;int s[maxn];void init(){ // 初始化使初始的每个结点都是自己的根结点 for(int i = 1 ; i <= maxn ; i++){ s[i]=i; } }int find_set(int x){ // 找到每个元素的根结点,并且压缩路径使得每个元素直接

  • NOI2015 洛谷P1955 程序自动分析(并查集+离散化)2022-04-16 14:32:04

    这可能是我目前做过的最简单的一道noi题目了...... 先对e=1的处理,用并查集;再对e=0查询,如果这两个在同一集合中,则为“”NO“,最后都满足的话输出”“YES”; 数值很大,用一下离散化就行了。 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e6+10; 4 int t,n,fa

  • dls的数据结构-笛卡尔树,st表,带权并查集2022-04-14 13:00:06

    笛卡尔树 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1e6+10; int ans[N], tot; // a存放原序列,top从0开始,右边闭区间 // 建立区间最小值笛卡尔树 // 根节点是stk[1] int stk[N], top, a[N], l[N], r[N]; int n; void dfs(int

  • POJ-1988-Cube Stacking2022-04-11 09:04:40

    题目传送门 一、题目大意 有\(n\)个箱子,初始时每个箱子单独为一列; 接下来有\(p\)行输入,\(M\), \(x\), \(y\) 或者 \(C\), \(x\); 对于\(M\),\(x\),\(y\):表示将\(x\)箱子所在的一列箱子搬到\(y\)所在的一列箱子上; 对于\(C\),\(x\):表示查询箱子\(x\)下面有多少个箱子; 二、解析 本题在

  • 最小生成树【克鲁斯卡尔】【并查集】2022-04-09 01:02:53

    package lanqiao; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class MinTree { static int[]

  • 并查集2022-04-04 01:32:25

        实现并查集: 1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 class UnionFindSet { 7 public: 8 UnionFindSet(int size) : size_(size) { 9 this->size_ = size; 10 this->numGroups_

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有