【算法简介】递归与回溯
算法简介:如影流露的冷刃递归和回溯,亲家兄弟如影随形,几乎哪里都能看到他们,所以说这里的副标题是万物根基。递归的思想,相信都不陌生,就是把所有的问题分成小块小块的去解决。而回溯,就是在递归完了之后,往回走,再接着递归。这种一步一步的枚举方式,可以很方便的穷举出所有的情况结果,这个就是递归。
像我们熟知的算法动态规划,它最初的形态也是递归,不过因为递归的特性而不利于优化,所以呢后续就有了非递归形式的动规,而各种神奇的动规优化方式也接踵而来。
算法演示:层见叠出的谜象正如标题,层见叠出,就是递归的基本特征。对于斐波那契数列,相信大家都不陌生,我们可以用下列的函数来表示斐波那契的值:
\forall x\in \operatorname N^{\ast},\operatorname{f}(x)=
\begin{cases}
1 &{x\le 2}\\
\operatorname{f}(x-1) + \operatorname{f}(x-2) & \operatorname{other.}
\end{cases}这就可以称为递归的基本形式了。如果我们要求第 $3$ 个斐波那契数,就会根据函数 ...
Math Combinatorial Counting [I]
Definition of Combinatorial CountingWe all have studied some basic Combinatorial Counting in primary , middle or high school. But now I still want to tell you the definition of Combinatorial Counting.
The Combinatorial Counting is a old things in math. Know we will get many branch in math that have some correlation with Combinatorial Counting.
I think the Combinatorial Counting is a way to discuss the method to calculate a combo of set. We all know we have such as problem in primary :
Problem : ...
【拾题杂谈】CF835F Roads in the Kingdom
题面:Roads in the Kingdom题面翻译题目描述
王国有 $n$ 座城市与 $n$ 条有长度的街道,保证所有城市直接或间接联通,我们定义王国的直径为所有点对最短距离中的最大值,现因财政危机需拆除一条道路并同时要求所有城市仍然联通,求所有拆除方案中王国直径的最小值。
输入格式
第一行一个整数 $n$,接下来 $n$ 行每行三个整数 $u,v,w$ 表示城市 $u,v$ 之间有一条长度为 $w$ 的道路。
输出格式
一行一个答案,表示所有方案中直径最小值。
题目描述In the Kingdom K., there are $ n $ towns numbered with integers from $ 1 $ to $ n $ . The towns are connected by $ n $ bi-directional roads numbered with integers from $ 1 $ to $ n $ . The $ i $ -th road connects the towns $ u_{i} $ and $ v_{i} $ and its lengt ...
【拾题杂谈】LuoguP2607 [ZJOI2008] 骑士
题面:[ZJOI2008] 骑士题目描述Z 国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英。他们劫富济贫,惩恶扬善,受到社会各界的赞扬。
最近发生了一件可怕的事情,邪恶的 Y 国发动了一场针对 Z 国的侵略战争。战火绵延五百里,在和平环境中安逸了数百年的 Z 国又怎能抵挡的住 Y 国的军队。于是人们把所有的希望都寄托在了骑士团的身上,就像期待有一个真龙天子的降生,带领正义打败邪恶。
骑士团是肯定具有打败邪恶势力的能力的,但是骑士们互相之间往往有一些矛盾。每个骑士都有且仅有一个自己最厌恶的骑士(当然不是他自己),他是绝对不会与自己最厌恶的人一同出征的。
战火绵延,人民生灵涂炭,组织起一个骑士军团加入战斗刻不容缓!国王交给了你一个艰巨的任务,从所有的骑士中选出一个骑士军团,使得军团内没有矛盾的两人(不存在一个骑士与他最痛恨的人一同被选入骑士军团的情况),并且,使得这支骑士军团最具有战斗力。
为了描述战斗力,我们将骑士按照 $1$ 至 $n$ 编号,给每名骑士一个战斗力的估计,一个军团的战斗力为所有骑士的战斗力总和。
输入格式第一行包含一个整数 $n$,描述骑士团的人数。
接下来 ...
【算法介绍】基环树
算法简介:稳固阵线的魄力实话实说,这个被叫做基环树东西,没有什么强制的算法。本质上来讲,这是一种特殊的图,因为他特殊的性质,存在一种方式去统计和综合上面的信息,所以被单独拿出来讲了。
基环树,这个名字可以仍未是基于环的树,这个思维去解决问题的思路,还有答案的计算已经图的构建,都和环离不开关系,所谓基环基环,就是有环且仅有一个环的树。有时候也被称为章鱼图
算法基础:诱导殉爆的狙击那么首先,我们来介绍基环树的基本相关内容,首先给出一个基环树的图片。
说实话,这张图片可能画的不够明显。我们会发现这个被称为基环树的结构分为两个部分:
中间的环。树周围的分支,都围绕着中间的那四个环节点连出来。
周围的支。环的每一个节点,都可以看做一个以当前环节点为根的子树。
这和基环树的定义有关,一棵树增加一条边使得原图存在了一个环,这就是基环树。
而基环树处理问题的思路,就是分别处理每一个子树,然后再通过环统计一些答案。这就是基环树处理问题的基本思想,下面给出一个实例尝试一下。
算法演示:娴熟复装的技巧那么我们现在就给出演示实例。比如说我们要求基环树的直径,或者说距离最远的两个点对。这里给出一道例题:I ...
【基础语法】第一篇之 “读入输出”
基础语法之“读入输出”
基本介绍在 C++ 读入有两种流派,第一种是 C++ 新出品的 cin/cout 代表的 IOS 流派。第二种是传承自 C 语言的 scanf/printf 代表的旧语法流派。当然还有一些人会使用 快读/快写 等高速读入方式,后面的文章会提及。
IOS 流派
读入
一般来讲,在新手入门时,推荐使用$cin$来读入,其格式类似于:
123456789#include<bits/stdsc++.h>#include<iostream>// iostream 是包含 cin/cout 的头文件,当然包括在万能头里,所以如果引用了万能头,就不必担心用不了 cin/cout 了using namespace std;// 另外,cin/cout 还依赖于 C++ 新出的 std 库,也就是说我们必须引用 std 命名空间才可以,就是上面那一句话,不然的话我们要在所有和 std 有关的工具前面加上 std:: 这是命名空间的引用方式,以后的文章也会提及,举个例子,如果没有引用 std 库,那么 cin/cout 会变成 std::cin/std: ...
【算法介绍】扫描线思想
算法简介:号 · 仙蕊玲珑这篇文章就是继二维数点里挖下的坑的扫描线内容了。对于扫描线问题,其实是非常广泛的,就像动态规划一样。他主要是提供了一个在二维平面上用平行于坐标轴的线一个一个扫描过来的思想。总归一句话:只有你想不到,没有你扫不到。
友情链接:
【算法介绍】二维数点 | 祝馀宫
只要你可以按照题目的意思建立出可以通过题目的坐标系和线段,使其可以用扫描线扫出来,那么它就是可以的!
算法思想:武 · 西风长枪首先,既然叫做扫描线,那么上面叫做扫描呢?顾名思义,扫描扫描,从下到上扫一遍就可以了,但是扫描线其实还有一个特点,扫描线。其实所谓扫描线思想,就是把问题转化成一些线段,去按照某个顺序扫描他,然后顺便处理出问题。
我们可以先给出一个扫描线的经典问题,求矩形面积并。所谓矩形面积并,就是一堆矩形叠在一起,重复覆盖的地方只算一次,当然只出现一次的也是算一次(
那么这题首先第一眼应该都是暴力,毕竟大家都没什么好的思路去做这样奇怪的题目,那么,如果是扫描线呢?他其实是可以做出这样的题目的。为什么,我们来想想矩形是什么。小学大家就学过老师的名言:点动成线,线动成面。其实矩形的本质,就是一个 ...
【算法介绍】二维数点
算法简介:一箭双丘丘!其实吧,二维数点单独来讲不能算是一个算法,它泛指一种在二维平面上数有多少个点或类似的问题。涉及的数据结构比较广,也算是比较杂的一篇文章了。
二维数点大概有两种:静态的和动态的。根据题目给出的动静之分,我们可以大致知道用什么数据结构,一般来讲,单点动态的我们偏向用树状数组等操作,多点动态应该除了线段树没谁了;还有就是静态,一般来讲非必要情况都是树状数组,毕竟码量低,然后有时候会有扫描线的题目。扫描线还没讲,先挖个坑罢(
这里就挑几个二维数点的实例看看,大概意会一下。
算法演示:一触即发例题一:烧起来啦!大秦为你打开题目传送门
题面翻译平面上有n个点,还有一个长度为⑨的数列$a_1,a_2……a_9$满足$\sum_{i=1}^na_i=n $
你需要画两条水平直线和两条竖直直线将平面划为⑨各部分,每部分点数记为$b_1,b_2……b_9$
要求b是a的一种排列
你的直线坐标可以是实数,构造一组解,或无解(输出-1)
题目思路虽然说他是紫题,但是太简单了,不必有任何压力(我是一眼秒的
让你把一堆点分成一个九宫格(其实是找九宫格中间的四条分界线)然后每一个格子一定是给 ...
【拾题杂谈】LuoguP2486 [SDOI2011] 染色
题面:[SDOI2011] 染色题目描述给定一棵 $n$ 个节点的无根树,共有 $m$ 个操作,操作分为两种:
将节点 $a$ 到节点 $b$ 的路径上的所有点(包括 $a$ 和 $b$)都染成颜色 $c$。
询问节点 $a$ 到节点 $b$ 的路径上的颜色段数量。
颜色段的定义是极长的连续相同颜色被认为是一段。例如 112221 由三段组成:11、222、1。
输入格式输入的第一行是用空格隔开的两个整数,分别代表树的节点个数 $n$ 和操作个数 $m$。
第二行有 $n$ 个用空格隔开的整数,第 $i$ 个整数 $w_i$ 代表结点 $i$ 的初始颜色。
第 $3$ 到第 $(n + 1)$ 行,每行两个用空格隔开的整数 $u, v$,代表树上存在一条连结节点 $u$ 和节点 $v$ 的边。
第 $(n + 2)$ 到第 $(n + m + 1)$ 行,每行描述一个操作,其格式为:
每行首先有一个字符 $op$,代表本次操作的类型。
若 $op$ 为 C,则代表本次操作是一次染色操作,在一个空格后有三个用空格隔开的整数 $a, b, c$,代表将 $a$ 到 $b$ 的路径上 ...
【拾题杂谈】LuoguP2590 [ZJOI2008] 树的统计
题面:[ZJOI2008] 树的统计大秦为你打开题目传送门
题目描述一棵树上有 $n$ 个节点,编号分别为 $1$ 到 $n$,每个节点都有一个权值 $w$。
我们将以下面的形式来要求你对这棵树完成一些操作:
I. CHANGE u t : 把结点 $u$ 的权值改为 $t$。
II. QMAX u v: 询问从点 $u$ 到点 $v$ 的路径上的节点的最大权值。
III. QSUM u v: 询问从点 $u$ 到点 $v$ 的路径上的节点的权值和。
注意:从点 $u$ 到点 $v$ 的路径上的节点包括 $u$ 和 $v$ 本身。
输入格式输入文件的第一行为一个整数 $n$,表示节点的个数。
接下来 $n-1$ 行,每行 $2$ 个整数 $a$ 和 $b$,表示节点 $a$ 和节点 $b$ 之间有一条边相连。
接下来一行 $n$ 个整数,第 $i$ 个整数 $w_i$ 表示节点 $i$ 的权值。
接下来 $1$ 行,为一个整数 $q$,表示操作的总数。
接下来 $q$ 行,每行一个操作,以 CHANGE u t 或者 QMAX u v 或者 QSUM u v 的形式给出。
输出格式对 ...