随笔分类 -  算法合集 / 图论

摘要:问题引出: 给出 \(n\) 个点的树,求出分别以不同的 \(i\) 为根时,所有结点深度的和,根节点的深度为 \(0\)。 首先我们有个自然的暴力思路, 也就是以每个节点为根节点做一遍 \(dfs\) 这样的复杂度是 \(O(n^2)\) 级别的, 所以要进行优化 看下图: 我们首先假设每个节点具 阅读全文
posted @ 2024-10-06 12:09 o-Sakurajimamai-o 阅读(9) 评论(0) 推荐(0) 编辑
摘要:引言 第一次接触树链/重链剖分的时候还是学习 \(Lca\), 没系统性的看过剖分, 今天刚重新学习了一下, 还是比较神奇的, 没想到一个树形结构能有这么多种神奇的操作, 总的来说, 树链剖分还是比较重要的一个策略 正文 定义 先给出图示 首先我们给出以下几个定义: 重儿子, 对于一个非叶子节点, 阅读全文
posted @ 2024-07-14 19:47 o-Sakurajimamai-o 阅读(28) 评论(0) 推荐(0) 编辑
摘要:介绍 点分治, 作为一种统计带权树简单路径长度的暴力分治算法, 其分治方法非常的巧妙, 可以将暴力的 \(O(n^2)\) 优化到 \(O(nlogn)\) 先看问题: 在一个带权树上, 统计两个点的简单路径长度不超过 \(k\) 的路径个数 这就是 模板题1 POJ1741 首先还是考虑如何使用暴 阅读全文
posted @ 2024-07-12 03:17 o-Sakurajimamai-o 阅读(60) 评论(0) 推荐(0) 编辑
摘要:基环树简单介绍 目录#1.0 啥是基环树?#1.1 无向图上的基环树#1.2 有向图上的基环树#1.2.1 内向树#1.2.2 外向树#2.0 基环树的一般处理思路#2.1 大体方法#2.2 找到环#2.2.1 思路#2.2.2 代码实现#2.3 剩下的操作#3.0 例题#3.1 [IOI2008] 阅读全文
posted @ 2024-06-11 12:56 o-Sakurajimamai-o 阅读(16) 评论(0) 推荐(0) 编辑
摘要:对于树上的两点之间的简单路径,求经过边权值的最大异或和 首先考虑一个点到根节点所经过路径的异或和,可以深搜求出 考虑两点简单路径的异或和,其值一定是两个点分别到根节点的异或和的异或,那么此时我们已知一个点,如果求出另一个点使得两点之间的异或和最大呢? 考虑字典树存取,深搜完之后,将每个点到根节点的异 阅读全文
posted @ 2024-06-07 17:31 o-Sakurajimamai-o 阅读(30) 评论(0) 推荐(0) 编辑
摘要:P2324 [SCOI2005] 骑士精神 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 主要在于 $A*$ 函数中估价函数,这里给出最好想也是我想出来的一种方法,也就是当黑白棋子各自都在对方的领域上,那么就可以考虑一种最小的消耗情况,也就是走一步顶两步,也就是黑白互换,那么此时 阅读全文
posted @ 2024-05-07 13:36 o-Sakurajimamai-o 阅读(48) 评论(0) 推荐(0) 编辑
摘要:Kruskal重构树,即与瓶颈树类似,kurskal重构树的特性是,任意两点之间的简单路径种的(最大或最小)边权值为其最近公共祖先 Kruskal算法首先给出一张有向图,让我们求最小生成树(用总权值最小的一些边的集合,使得所有点都能互通,很明显n个点会有n-1条边) kruskal算法思想是先把所有 阅读全文
posted @ 2024-04-02 22:03 o-Sakurajimamai-o 阅读(43) 评论(0) 推荐(0) 编辑
摘要:对于最短路径树SPT,首先给你一张正权无向图,源点任意,然后要求你删除或者选择全部边的某些边,使得尽可能多的保持两点之间的最短路径,输出边的编号即可 首先从源点跑一遍最短路,在最短路中我们需要记录一个东西,还记得怎么输出路径嘛?是不是在遍历的时候记录一个$pre$数组即可?同样的,我们把这些前驱点保 阅读全文
posted @ 2024-03-29 18:58 o-Sakurajimamai-o 阅读(25) 评论(0) 推荐(0) 编辑
摘要:# 跑路 ## 题目描述 小 A 的工作不仅繁琐,更有苛刻的规定,要求小 A 每天早上在 $6:00$ 之前到达公司,否则这个月工资清零。可是小 A 偏偏又有赖床的坏毛病。于是为了保住自己的工资,小 A 买了一个空间跑路器,每秒钟可以跑 $2^k$ 千米($k$ 是任意自然数)。当然,这个机器是用 阅读全文
posted @ 2023-09-17 16:31 o-Sakurajimamai-o 阅读(17) 评论(0) 推荐(0) 编辑
摘要:今天的模板测试是无向图上的广度优先遍历,【数据删除】马上写好了代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <vector> 6 #includ 阅读全文
posted @ 2023-08-14 17:15 o-Sakurajimamai-o 阅读(33) 评论(0) 推荐(0) 编辑
摘要:我写这个随笔是让我更加理解算法,防止以后出错,因为我今天调Tarjan调了3个多小时,后来还是在大佬的帮忙下调出来了,问题不少 先来看错误的(40pts): //缩点 //https://www.luogu.com.cn/problem/P3387 #include<bits/stdc++.h> # 阅读全文
posted @ 2023-08-08 18:30 o-Sakurajimamai-o 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原代码 O(n2): 772ms #include<bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,M=1e4+10; int n,m,res,f[N],p[N],a[N],s,k,level[ 阅读全文
posted @ 2023-08-08 09:47 o-Sakurajimamai-o 阅读(15) 评论(0) 推荐(0) 编辑
摘要:首先,DAG求最短路是有四种方法,分别是 SPFA,Dijkstra,拓扑,记忆化深搜 注意,求最长路只有三种,Dijkstra不适用于最长路,我tm纠结了3个小时,操操操操操操操操操操操 // //车站分级 // //https://www.luogu.com.cn/problem/P1983 # 阅读全文
posted @ 2023-08-07 13:57 o-Sakurajimamai-o 阅读(112) 评论(0) 推荐(0) 编辑
摘要:树的重心:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。使得以该节点为根的子树中,最大子树高度最小的节点 //会议 //https://www.luogu.com.cn/problem/P1395 // f数组:f数组用于记录以每个节 阅读全文
posted @ 2023-08-06 10:25 o-Sakurajimamai-o 阅读(15) 评论(0) 推荐(0) 编辑
摘要://通往奥格瑞玛的道路 //二分最大的答案,然后有单点超过这个值就直接返回,继续二分 //每循环一次都要跑一遍最短路,这里选择时间复杂度更优的堆优化dijkstra //坑点的较多,还请注意 #include<bits/stdc++.h> #define int long long using na 阅读全文
posted @ 2023-08-06 09:08 o-Sakurajimamai-o 阅读(11) 评论(0) 推荐(0) 编辑
摘要:Edgy Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given a tree (a conne 阅读全文
posted @ 2023-06-16 15:31 o-Sakurajimamai-o 阅读(13) 评论(0) 推荐(0) 编辑
摘要:[蓝桥杯 2022 省 B] 扫雷 题目描述 小明最近迷上了一款名为《扫雷》的游戏。其中有一个关卡的任务如下,在一个二维平面上放置着 n 个炸雷,第 2023-05-31i 个炸雷 (,,)(xi​,yi​,ri​) 表示在坐标 (,)(xi​,yi​) 处存在一个炸雷,它的爆炸范围是以半径为 ri 阅读全文
posted @ 2023-05-31 13:32 o-Sakurajimamai-o 阅读(35) 评论(0) 推荐(0) 编辑
摘要:题目描述 有一些电脑,一部分电脑有双向数据线连接。如果一个电脑得到数据,它可以传送到的电脑都可以得到数据。现在,你有这个数据,问你至少将其输入几台电脑,才能使所有电脑得到数据。 输入格式 第一行两个数n,m。n是点数,m是边数。 接下来m行,每行2个整数p,q表示p到q有一条双向数据线。 输出格式 阅读全文
posted @ 2023-05-26 15:53 o-Sakurajimamai-o 阅读(23) 评论(0) 推荐(0) 编辑
摘要:dijkstra: ///朴素dijkstra算法 —— 模板题 AcWing 849. Dijkstra求最短路 I ///时间复杂是 O(n2+m)O(n2+m), nn 表示点数,mm 表示边数 #include<bits/stdc++.h> using namespace std; cons 阅读全文
posted @ 2023-05-24 13:03 o-Sakurajimamai-o 阅读(29) 评论(0) 推荐(0) 编辑

-- --