ICode9

精准搜索请尝试: 精确搜索
  • 一通乱学【树问题相关】2022-07-16 17:34:59

    只要我什么都不会,一道题就可以快乐学习一下午( 货车运输 蓝题 题目描述 A 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\),城市之间有 \(m\) 条双向道路。每一条道路对车辆都有重量限制,简称限重。 现在有 \(q\) 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重

  • P1892团伙 -- 并查集datastructure2022-07-14 20:31:07

    #include <bits/stdc++.h> using i64 = long long; int fa[1000005],b[1000005]; int find(int x){ return (fa[x] == x ? x : (fa[x] = find(fa[x]))); } void merge(int x,int y){ fa[find(x)] = find(y); } int main(){ std::ios::sync_with_stdio(fal

  • 并查集2022-07-14 15:01:10

    例题链接 并查集是一个集合操作,将一个集合与另一个集合合并或者查询两个元素是否属于同一个集合。具体操作是先创建一个数组存放各个元素的父亲,初始给每个元素指定父亲是它自己。在合并操作时,先看看两个元素的父亲是否相同,如果相同就不变,否则就让一个的父亲等于另一个的父亲。在查

  • 并查集判断二分图2022-07-13 12:02:18

    原理 首先,一个图是二分图,当且仅当图中不含奇数环。那么我们只要用并查集判断图中是否含有奇数环。 设二分图的两个集合为s1、s2,因为集合内不能有边,那么二分图的环首尾相接的边必然是$ s1\rightarrow s2 \rightarrow s1\rightarrow s2\dots $ 如图所示,如果边是奇数,不能成环。因为

  • 洛谷 P2024 食物链2022-07-12 16:38:01

    题目传送门:https://www.luogu.com.cn/problem/P2024 一般的并查集只能用来解决”亲戚的亲戚是亲戚“这类问题,但是如果关系变得复杂就不好解决。 比如”敌人的敌人是朋友“这类的问题,很明显普通的并查集无法解决,这个时候我们就要用到普通并查集的进阶版——种类并查集。   一般的

  • CF #805(div3) F - Equate Multisets 并查集+二分图?2022-07-11 21:06:09

    给定若干个点对,每个点对包含的数字均在1-n之间 要求把这些点对分到两个set里面,使得每个set里面的n不重复 (话说我的第一反应是2-set然后慌张自己2-set不会打嘿嘿嘿) 一般这种匹配,冲突,点,都和图论有点关系 和图论有点关系就是要建图啦 俺的建图是把数字看成一个节点,如果存在点对,比如(1,2

  • NC14685 加边的无向图2022-07-10 02:00:18

    题目链接 题目 题目描述 给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~ 输入描述 第一行两个正整数 n 和 m 。 接下来的m行中,每行两个正整数 i 、 j ,表示点i与点j之间有一条无向道路。 输出描述 输出一个整数,表示答案 示例1 输入 4 2 1

  • luogu P5064 [Ynoi2014] 等这场战争结束之后2022-07-09 22:04:44

    题面传送门 按秩合并并查集写错复杂度假掉以为自己被卡常卡了好久。 首先这种撤销题看上去就是把操作树建立出来然后dfs变成加入与撤销。 然后我们考虑对值域分块,这样看上去求\(k\)小值会可做一些。 首先我们需要确定每个询问在哪个块,这并不困难。我们考虑在dfs时用并查集维护,并查

  • 2022.7.8 并查集+路径压缩2022-07-08 21:32:48

    一个简洁优秀的讲解https://zhuanlan.zhihu.com/p/93647900 【模板】并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作。 输入格式 第一行包含两个整数 \(N,M\) ,表示共有 \(N\) 个元素和 \(M\) 个操作。 接下来 \(M\) 行,每行包含三个整数 \(Z_i,X_i,Y_i\) 。 当 \(

  • 并查集2022-07-08 20:00:45

    1 //-----并查集的初始化----- 2 3 //一开始有n个元素,互相独立,则构成了n个集合,每个集合的代表元素就是它本身 4 5 const int maxn = 100010; 6 7 int fa[maxn + 1]; //fa数组记录每个元素由谁代表 8 int sz[maxn + 1]; //sz数组记录每个集合的元素个数 9 int dep

  • 扩展域并查集2022-07-06 11:42:11

    扩展域并查集 扩展域并查集常用来维护多组关系的集合合并问题 比如维护两个有敌对关系的集合,就可以用扩展域并查集 食物链 首先我们定义一个物种a a的天敌为a + n a的猎物为a + n * 2 可以得出 a + n -> a -> a + n * 2 a + n * 2 -> a + n #include <iostream> using nam

  • CodeForces 811E Vladik and Entertaining Flags2022-07-03 16:34:01

    洛谷传送门 CF 传送门 思路 显然线段树。每个节点存最左端的列的并查集和最右端的列的并查集,并且维护这个节点中连通块的数量。merge 时先将 \(res\) 的连通块数量设为两个子结点的连通块数量之和,然后合并左儿子最右端的列的并查集和右儿子最左端的列的并查集,如果合并成功则 \(res

  • 仓库管理-逆向输入转并查集2022-07-02 17:01:52

    题目链接meituan-002. 小美的仓库整理 - 力扣(LeetCode)   思路,正序每次删除一个节点,将货物多拆出来一堆,反过来看,对于一个空数组,每次向内部插入一个节点,根据节点的位置,使用并查集查找根节点的方式查看是否是连续的。 在插入新节点的时候,最大值只可能被新节点加入到的集合中改变,因

  • 2022暑假集训队选拔赛补题2022-06-21 21:33:46

    E ginger的染色 首先对于一个排列 ,如果看成环图的结构,那么 就向 连一条无向边。所以对于任意一个排列就会产生若干个环,连通性可以用并查集维护,现在对每个点进行黑白染色,题意转换为对于环中任意相邻两点颜色不能相同,那么只有偶数元环才能够染色成二分图,而每个偶环的方案数为 ,设当前

  • 217A - Ice Skating2022-06-19 08:00:14

    并查集: 思路:把所有x或y相同的点合并成一个集合,所需要加的点数就是连通块数量-1。 #include <iostream> using namespace std; const int N = 110; int n; int x[N],y[N],p[N]; int find (int x) { if (p[x] != x) p[x] = find (p[x]); return p[x]; } int main () { cin >> n;

  • 「算法学习」并查集以及它的一些扩展2022-06-08 00:33:30

    并查集 简介 并查集是一种树形的数据结构,它支持两种操作: 查找(find):查询某个元素属于哪个集合; 合并(merge):将两个集合合并成同一个集合。 查找 我们令 find 函数表示寻找 \(x\) 的祖先。如果 \(x\) 已经是祖先,则返回;否则递归到 \(f[x]\) 的子问题。 int find(int x) { return f[

  • leetcode(24)并查集系列题目2022-06-07 14:04:09

    684. 冗余连接 最开始,每个人都是自己的爹。 因为所有人名字都是自然数1,2,3,4。构建一个【爹们】数组,parents,就直接把第一位朋友1的爹放在index为1的位置,第二位朋友2的爹放在index为2的位置,排排站好 如果某个人的爹就是自己,那他就不可能再有别的爹了。 所以,去parents找第n位朋友的爹

  • 第三单元总结2022-06-05 00:00:40

    第三单元总结 分析在本单元自测过程中如何利用JML规格来准备测试数据 本单元自测进行得较少,自测的主要形式是和小伙伴进行对拍。由数据生成器生成若干组测试数据,再将自己和小伙伴的输出进行比对。在对拍的过程中,能够对正确性进行查验,但对复杂性的查验效果不是很好。 梳理本单元的

  • 使用并查集解决的相关问题2022-06-04 23:35:53

    作者: Grey 原文地址:使用并查集解决的相关问题 关于并查集的说明,见如下博客: 使用并查集处理集合的合并和查询问题 相关题目 LeetCode 200. 岛屿数量 本题的解题思路参考博客 使用DFS和并查集方法解决岛问题 LeetCode 547. 省份数量 主要思路 横纵坐标表示的是城市,因为城市是一样的

  • BUAA OO 第三单元总结2022-06-04 23:00:13

    BUAA OO 第三单元总结 如何利用JML规格来准备测试数据 如果要"利用JML规格来准备测试数据",我认为最重要的就是能够测试到方法的每一种行为 上图中红线标注的部分即为每一种行为的前置条件。在对方法进行单元测试时,可以分别构造满足每一种前置条件的数据,观察方法能否正确地返回或

  • 【并查集】概念的温习与用法的升华2022-06-04 11:02:59

    并查集适用场景: 快速的判断某个元素属于哪个集合,快速的合并两个集合。</p> 暴力的做法中,查询的复杂度为O(1),合并的复杂度则很高。 在并查集中,并查集的复杂度为接近O(1)。 并查集的特点: 以树的形式来维护一个集合。 根节点的编号就是当前集合的编号。 保存当前节点的父节点。

  • 2022-OO-Unit32022-06-03 18:02:58

    2022-Unit3 一、利用JML准备测试数据 边界数据 边界数据的构造主要由JML规格而来,比如group.size() > 1111人的数据、将3块钱红包发给5个人的数据……构造这种边界数据需要在阅读JML规格时及其细心。 压力数据 压力数据的构造比边界数据简单一些。最简单的压力数据就是N条重复指令

  • 110 并查集2022-05-28 09:33:48

    视频链接: // Luogu P3367 【模板】并查集 ///////路径压缩 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=100010; int n,m,x,y,z; int fa[N]; int find(int x){ if(fa[x]==x) return x; return fa[x]=find(fa[

  • 并查集笔记2022-05-23 11:31:36

    代码实现:通过路径压缩把某类节点统统并入根节点,类似于冠状病毒(? 首先把每个节点的父节点设置为他们自己 find函数以及修改父节点代码实现 int findset(int n){ return fa[n]==n?n:fa[n]=findset(fa[n]); } 并查集父节点查询与融合操作 int fx=findset(x),fy=findset(y);

  • 1020. 飞地的数量(BFS 和并查集)2022-05-22 16:03:50

    1020. 飞地的数量 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。 返回网格中 无法 在任意次数的移动中离开网格边界

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

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

ICode9版权所有