ICode9

精准搜索请尝试: 精确搜索
  • 蓝桥杯 修改数组(并查集)2022-02-02 18:01:23

     一开始没什么思路,暴力显然会T,挺难想到用并查集来做的 p[x]指向的就是x应该修改成的数,在find的过程中,其实就是找到第一个没有出现过的数 #include<iostream> #include<algorithm> #include<map> using namespace std; typedef long long ll; const int N=1e6+5; int p[N];//p[

  • 【带权并查集 + DP】真正的骗子2022-02-01 22:32:13

    这题属实逆天。。题面在输出格式中没有说明需要将编号排序后输出,让我困惑了半天呜呜。 分析 题目本身的思路是很简单的。 我们从一个人说 yes 和 no 能够得到什么呢? 假设这个人是天神,那么说 yes 说明对方也是天神,否则是恶魔。 假设这个人是恶魔,那么说 yes 说明对方也是恶魔,否则是

  • 1/31并查集,拓扑排序2022-01-31 21:05:55

    https://www.luogu.com.cn/problem/P1137 链式向前星的存储方式,我还不是很明白,但真的很重要,总结一下。 用到结构体(含义可理解为边)和一个头head数组。结构体中nxt指向之前的头,就是这条边从哪里结果来的,若为-1则它没有前驱。 头数组head记录现在的序号cnt,因为它可能作为下一条

  • 并查集模板2022-01-31 11:31:49

    前言:今天是农历2021的最后一天!今天就不介绍什么新算法了,放一个带有路径压缩和按秩合并的并查集模板吧,祝大家在新的一年里,都能和挚友走在一起,union 长存! 代码模板: struct UnionFind { int n; vector<int> par, rank; UnionFind(int _n) { n = _n; par = vector<int>

  • 并查集板子2022-01-30 15:02:17

    一、code 初始化 int fa[N]; void init(int n){ for(int i=0;i<n;i++){ fa[i]=i; } } 查询 注:上溯到根父亲节点 int find(int now){ if(fa[now]==now){ return now; }else{ return find(fa[now]); //注意这里的para是fa[now]

  • 【笔记】并查集---无向图处理代码模板及类型题2022-01-29 18:03:16

    在个人博客查看本文 并查集要处理的两个问题 查询 查询图中两个顶点是否在同一个集合之中。 合并 将两个不相交的集合进行合并。 设计并查集的两种思想 基于id 给每个顶点分配一个唯一的标识,称为 id id 不同则来自不同的集合。 合并时需要将其中一个集合中的所有元素的 id

  • 并查集模板2022-01-29 16:30:00

    #include<bits/stdc++.h> using namespace std; int n,m; int z,x,y; int a[1000000]; int find(int k){ if(a[k] == k){ return k; }else{ return a[k] = find(a[k]); } } int main(){ cin >> n >> m; for(int i = 1;i <= n;i++){ a[i] = i;

  • LeetCode力扣839.相似字符串组(C++)【并查集】详细解析+代码注释2022-01-28 23:31:13

    LeetCode力扣839.相似字符串组 题目描述 如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 给你多个字符串。每个字符串都是其他所有字符串的一个字母异位词。请问给出的字符串中有多

  • P2024 [NOI2001] 食物链2022-01-26 15:35:02

    题面 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。 现有 N 个动物,以 1 - N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这 N 个动物所构成的食物链关系进行描述: 第一种说法是 1 X Y,表示 X 和 Y

  • 【题解】P4117 [Ynoi2018] 五彩斑斓的世界2022-01-26 13:34:01

    题意 P4117 [Ynoi2018] 五彩斑斓的世界 给定一个长度为 \(n\) 的序列和 \(m\) 个操作,每次操作可以: 将区间 \([l, r]\) 中所有大于 \(x\) 的值减去 \(x\) 询问区间 \([l, r]\) 中值 \(x\) 的出现次数 \(1 \leq n \leq 10^6, 1 \leq m \leq 5 \times 10^5, 1 \leq l \leq r \l

  • #4668. 冷战——并查集2022-01-26 13:01:48

    1.普通的并查集 查找: int find(int x){ return x==fa[x]?x:find(fa[x]);//如果父节点不是自己,那么去找父节点的父节点 } 合并: for(int i=1;i<=n;i++)fa[i]=i;//预处理 x=read();y=read();//读入 if(find(x)!=find(y))//如果不是同一个并查集的话才需要合并 fa[find(x)]=find

  • codeforces1620E Replace the Numbers(并查集)2022-01-23 20:02:32

    题目链接:codeforces 1620E 题目思路: 倒序遍历每次的操作,对于操作 2 2 2,相当于把 x 加入到代表元是 y 的集合。 参考代码: #include<iostream> using namespace std; const int N = 5e5 + 1

  • 并查集练习-合根植物2022-01-23 14:34:03

    合根植物 1)题目(合根植物)2、输入描述3、输出描述4、示例5、样例说明6、解题思路7、题解 1)题目(合根植物) w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。 这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格

  • 线段树分治 学习笔记2022-01-20 16:04:12

    有时候,一些操作并不支持删除,但支持撤销(比如并查集),就用线段树分治。 可撤销并查集 用按秩合并,但不能路径压缩。 记录一个操作栈,代表第 \(i\) 次操作。撤销的时候就弹栈,复原 \(x\) 的父亲为它自己,以及 \(y\) 的 height 即可。 二分图 暴力的话,用扩展域并查集,但是不好删除,但是好撤

  • POJ-1988-Cube Stacking2022-01-19 23:02:56

    题目大意:给定编号为1到30000的小块。可以进行合并和查询两种操作 合并:将含有x的整块摞到含有y的整块上面,合并成一个新的整块 查询:输出x下方的块的数量 一眼并查集,但就是不知道怎么写。想了很久才想到要以每个整块的底块作为并查集的根,并维护某个块底下的小块的数量作为并查集的

  • 寒假学习记录2022-01-19 09:33:52

    2022.1.17 今日学习:单调栈,单调队列,堆 DS_problem 1 游戏1 单调栈水题,倒序枚举维护一个单调栈即可。 DS_problem 03 枚举以行为底的1最大向上拓展数量,设为 \(h(x)\) ,则 \(l\) 到 \(r\) 的矩阵面积最大值为 \[(r-l+1)× \min^{r}_{i=l} h(i) \]用单调栈维护即可。 DS_problem 04 用

  • CF1620E - Replace the Numbers(构造算法 + 数据结构 + 并查集 + 模拟 / 铁牌级)2022-01-18 23:02:45

    1620E - Replace the Numbers(源地址自⇔CF1620E) 目录 1620E - Replace the Numbers(源地址自⇔CF1620E) tag 题意 思路 AC代码 错误次数 tag ⇔构造算法、⇔数据结构、⇔并查集、⇔模拟、⇔铁牌级(*1900) 题意 给出一个空数组,规定两种操作: 在数组末尾加上 \(x\) ; 将数组

  • 第3期:2021秋季算法入门班第五章习题:优先队列、并查集2022-01-18 23:02:41

    1 [NOIP2004]合并果子 本题应用到了优先队列,这也算是我的第一道优先队列题。 #include<bits/stdc++.h> using namespace std; int main(){ int n,e,a,b,ans=0,c; cin>>n; priority_queue<int,vector<int>,greater<int>> p; for(int i=0;i<n;i++){

  • [USACO16OPEN]Closing the Farm 题解2022-01-17 17:32:17

    本题有两道一模一样的题目,改个数据范围即可 AC。 题目1 | 题目2 题意简述 给定一张无向图,每次删去一个点,问每次操作后图是否联通。 分析 判断图是否联通可以想到使用并查集来维护。但是并查集很难实现删除操作,那如何处理呢? 并查集的核心是“并”和“查”,既然题目要求每次删去一个

  • Junk-Mail Filter2022-01-16 21:59:40

    最近在给新生上数据结构 于是复习(预习)了一下并查集 怎么有人给别人上课前才在学啊 (去年学了,但是摸太久了忘了) 给n个点m条操作 操作M:认为a和b属于一个集合 操作S:认为a不属于原来的集合 求有多少个集合 很明显是并查集 但是多了个删除单点的操作 设置虚拟节点 若原本1,2,3属于一个

  • 并查集学习总结2022-01-15 20:06:54

    这是一个小伙试图学习最短路径,然后被克鲁斯卡尔暴打的故事。 然后偷偷打开b站学习了一波并查集。 名词解释: 合并,查找,集合。 合并:将两个集合合并为一个。 查找:早到该元素的根。 实现方法: 通过一个parent数据纪录他的根节点,默认规定他的根是自己。 查找的实现: int unfind(int x)

  • 【重拾算法】并查集2022-01-12 20:31:01

    一、什么是并查集 并查集是图论中的一种算法 集就是集合,因此可以看出并查集与集合操作有关 并查集内有两个重要的操作:合并(union),查询(find) 合并操作是用来将不同的集合合并为一个集合,查询操作用来查询某个元素所属的集合 二、举个栗子 1. 栗子 假设现在有六个元素,代号分别为

  • 并查集-leetcode题目总结2022-01-09 22:01:58

    本文记录了有关并查集在leetcode中的相关情况,如果有同学在做相关的内容,可以邮件(zhaoliang619960421@outlook.com)或微信(BestCoder_BestLife)与我联系 本文参考了以下的相关文档,在此对文档作者表示感谢: https://zhuanlan.zhihu.com/p/93647900 https://blog.csdn.net/dingdingdo

  • LeetCode684-多余的边:递归除边+并查集C++解法2022-01-09 15:03:40

    题目描述: 给定一棵n各节点(节点值1~n)的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间,且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组edges ,edges[i] = [ai, bi] 表示图中在 ai 和 bi 之间存在一条边。 请找出一条可以删去的边,删除后

  • 并查集习题X-Plosives(uvaOJ1160)2022-01-09 11:34:03

    原题链接Online JudgeOnline Judgehttps://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3601 VJ链接X-Plosives - UVA 1160 - Virtual Judgehttps://vjudge.net/problem/UVA-1160 题目描述:给你几组数a和b,表示a和b会形成化合物,如果

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

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

ICode9版权所有