分类: OI

43 篇文章

LCA 问题的不同解法
0 序 为了强化笔者对LCA的理解,故作此文。 1 DFS序求LCA 1.1 算法介绍 考虑树上的两个节点 $u$, $v$ 和其祖先 $d$,我们之所以使用欧拉序求解 LCA 是因为在欧拉序中 $d$ 一定在 $u,v$ 之间出现。但对于 DFS 序来说,$d$ 一定在 $u,v$ 之前出现。 令 $u$ 的 DFN 小于 $v$,且 $u\ne…
浅谈双连通分量
前置知识 图论相关概念 割点和桥 强连通分量 点双连通分量 在一个无向图中,若删除图中的任意一个点,这个图还能连通,则称这个图为点双连通 例题:P8435 【模板】点双连通分量 在书写代码的时候有需要注意的地方会在程序中标注。 #include <bits/stdc++.h> using namespace std; const int…
2023.10.30 学习笔记(野人过河)
题目描述 有三个野人三个道士,他们在何的右岸,现有一艘只能容纳两个人的小船,因为野人比较野蛮,如果河一侧野人的数量大于道士的数量,野人就会攻击道士,问如何安全的过河。输出任意一种方案。 问题分析 这道题目可以通过搜索来实现,广搜和深搜均可,在这里为了锻炼使用广搜的代码能力,笔者决定用广搜来解答这道题目。 为了进行广搜我们需要创建一个三元组$(x, …
OI 注意事项、易错点以及一些方法
按照重要性递减 注意事项 **适用于四川* 考试时要在 D 盘 csp 目录下作答,不能建立子文件夹。 代码中记得加freopen,考试结束前记得删注释。 检查“地球”的路径和准考证号是否正确。 注意数据范围选择合适的变量类型,若无法判断变量类型则一律开long long。 防止乱开 long long 出现的 MLE,TLE等问题。 若一个测试点…
无向图的连通性
割点 什么是割点 在无向图中所有能够互通的点构成了连通分量,其中有一些关键的点,如果删除它,如果这个联通分量被分成了两个或者更多,则称这个点为割点。 通俗的讲,现在有很多个主机连在一起构成网络,但是如果有一个主机烂掉了,你就无法访问洛谷,则称则称这个主机是一个割点。 求割点 在通过 DFS 遍历个图的时候,很容易发现如果一个点是割点,则它的儿子们都…
DFS 序在祖先问题的使用
祖孙询问 此问题可以用 LCA 来解决,但是 LCA 的码量大,而且可能容易写挂,~~尤其是像我这种蒟蒻~~ 如果卡时间的话有可能倍增/重链剖分 LCA 都要挂掉,这时候就是 DFS 序发挥作用的时候了。 拿一个计数器。在遍历到每一个节点的时候,我们在进入它的时候记录一下,在离开它的时候也记录一下,在记录完成后就得到了一个树的 DFS 序 代码如下…
算法竞赛中 sort 的使用
sort 算法竞赛中的每一毫秒都是珍贵的 而 sort 的不恰当使用会浪费很多额外的时间,尤其是在数据量较大的时候。 平时阅读题解的时候发现很多大佬都会这样子写 sort : sort(a + 1, a + 1 + n, [](const int& x, const int& y) { return x > y; }); 或者…
基数排序
基数排序 需要处理的数字 24、21、123、321、122、23、32 类型 0 1 2 3 4 5 6 个位计数器 0 2 2 2 1 0 0 求前缀和(是每一个元素出现的位置) 0 2 4 6 7 7 7 到这一步之后每放入一个元素之后就吧对应数字$ -1 $ #include <iostream> using namespace…