摘要:
题目描述: 题目传送门 解题思路: 首先我们先忽略题目的标题(树状数组模板),我们来尝试一种新的算法——分块。 分块思想 分块是一种优美的暴力(by DFT)。他的核心思想在于将一个要维护的区间(长度为 n n n)分成又穷个 n \sqrt n n 个子区间来进行分别维护。每个子区间的长度都为 阅读全文
摘要:
迭代器 容器类 pair p a i r pair pair 可以自定义一个包含任意两个类型的类似结构体的结构。 如 pair<T1,T2> T1 、T2可以是 int ,也可以是 string 调用的时候可以用 变量名.first,变量名.second,来调用 #include <iostream 阅读全文
摘要:
问题描述 求一个有向图中的强连通分量的个数。 解题思路: 明确一下强连通的定义: 存在 i i i 和 j j j 两点,使得 i i i 和 j j j 互相可抵达。 根据强连通的定义,我们可以得出,若对存在强连通的图进行置换(将所有有向边反转),那么强连通任然是强连通的。 这里我们先给出一张存在 阅读全文
摘要:
问题描述: 题目传送门 解题思路: 我们首先假设存在这么一个不少于三个点的环,那么他肯定是由这么至少三个点组成的: k k k 点,环中编号最大的点。 i i i 点和 j j j 点,图中与 k k k 直接相连的两个不相同的点。 他们的大概结构如图: 此时,若这三个点共环,那么肯定存在一条 i 阅读全文
摘要:
问题描述: 题目传送门 解题思路: 可以利用乘法原理,判断原数上每一位数字有几种变化情况,然后相乘即为答案。 很显然,题目所给的变化情况即为一条边,而每一个数字的变化即为一个连通块,因此单个数字变化的个数即为这个连通块的大小。 判断联通快的算法很多,可以通过 d f s dfs dfs 和 b f 阅读全文
摘要:
问题描述: 题目传送门 解题思路: 我们一般会想到先在图上跑一遍最短路,然后在最短路径中找一条最长的边进行缩短。但是很容易可以发现,这种做法是很假的,因为缩短路径可能会使某条非最短路变成最短路。 此时我们需要考虑一种清奇的思路。 构建两张一模一样的图,其中上图 G G G 表示还未使用路径缩短的图, 阅读全文