算法
凌曦月
这个作者很懒,什么都没留下…
展开
-
次短路 && k短路
文章目录次短路再了解次短路与kkk短路之前,我们先了解一下最短路。次短路次短路就是简化版的kkk短路,我们先把这个了解了。题目传送门这是一道典型的次短路问题。我们都知道次短路是由最短路改变而来的。但我们怎么改?什么时候改?那当然是修改的时候啦。我们再更新最短路时就把次短路更新掉。我们定义dist_fdist\_fdist_f为最短路,dist_sdist\_sdist_s为次短路。则我们更新有三种情况:1.当dist_f[v]>dist_f[u]+wdist\_f[v]>d原创 2020-12-21 13:51:45 · 280 阅读 · 0 评论 -
A*算法
文章目录思想基本准则A∗A^*A∗算法,又叫做A−starA-starA−star算法,是一种静态路网中求解最短路径最有效的直接搜索方法。思想我们首先来回忆一下BFSBFSBFS算法,我们的BFSBFSBFS算法每次都是从堆顶取出当前代价最小的状态进行扩展。那最先扩展到的就是最优的。但我们BFSBFSBFS算法这种贪心思想是不完善的:我们虽然当前的代价小,但不能保证后来的代价也小(正所谓目光短浅)。这样就会使搜索量增大。我们的A∗A^*A∗算法就是加上一个估价函数:不断从堆中取出“当前代价+预估代原创 2020-12-19 17:08:51 · 473 阅读 · 1 评论 -
求逆序对的各种算法
文章目录1.冒泡排序思想代码:2.归并排序思想代码3.树状数组思想代码线段树思想设AAA为一个有nnn个数字的有序集(n>1)(n>1)(n>1),其中所有数字各不相同。如果存在正整数i,ji,ji,j使得1≤i<j≤n1 ≤ i < j ≤ n1≤i<j≤n而且A[i]>A[j]A[i] > A[j]A[i]>A[j],则<A[i],A[j]><A[i], A[j]><A[i],A[j]>这个有序对称为AAA的一原创 2020-12-03 19:21:34 · 1854 阅读 · 2 评论 -
2020 CSP-J 题解
文章目录T1T2T3T4T1题目传送门这道题就是一道水题,如果我们的正整数%2=1\%2=1%2=1的话,我们就输出−1-1−1;否则,我们就拆分。#include <bits/stdc++.h>using namespace std;int n;int main() { scanf("%d",&n); if(n%2) printf("-1"); else { for(int i=int(log(n)/log(2));i>=1;i--) { int原创 2020-11-13 19:18:28 · 747 阅读 · 0 评论 -
字典树Trie
文章目录存储插入操作insertinsertinsert代码检索searchsearchsearch代码完整代码存储我们的字典树是这样的:我们的字典树是用一个二维数组进行维护的:Trie[P][c]=Q;我们的PPP是起始节点,ccc是字符的ASCLLASCLLASCLL码(但是我们大多数时候是会把它缩小一下,比如c−′a′c-'a'c−′a′),QQQ是终点节点。我们的字典树就这样储存。插入操作insertinsertinsert1.我们先从根节点111开始,令P=1P=1P=1,如果原创 2020-10-31 10:09:29 · 89 阅读 · 0 评论 -
疫情控制
文章目录思路输入二分倍增预处理dfsdfsdfs寻找路径未被驻扎的叶子节点checkcheckcheck函数代码题目传送门思路我们的方法是:二分+贪心+倍增。我们可以知道:如果这个时间可以让题意满足,则比它大的时间也可以让题意满足。所以有单调性,我们就可以二分答案。但checkcheckcheck函数怎么打呢?我们要使用贪心:显然我们希望每个军队都停留在深度更小的节点(从而管理更多的路径),所以我们就需要军队向上走。若一个军队可以走到根节点,则令其暂时停在根节点的子节点。否则走到能够走到的深原创 2020-10-30 19:10:58 · 418 阅读 · 1 评论 -
严格次小生成树
文章目录思路不严格次小生成树严格次小生成树题目传送门思路次小生成树分为两种:严格次小生成树和不严格次小生成树。不严格次小生成树我们都十分清楚最小生成树的求法:贪心。我们只需要改一下求法我们就可以求出次小生成树了。我们先求出最小生成树。然后我们就把没有加入的边先放进去。那么就一定会组成一个环。我们把这个环中的次大边减去(因为最大边一定是加入的边)。然后我们就得到一个生成树。但不一定是最小的。所以我们要把每一个没有加入的边都遍历一遍,求出最小的一个。但这样做出来的次小生成树有可能就等原创 2020-10-30 13:05:40 · 398 阅读 · 0 评论 -
矩阵快速幂 && 求Fibonacci第n项 && Fibonacci前n项和
文章目录求FibonacciFibonacciFibonacci第nnn项代码总结FibonacciFibonacciFibonacci前nnn项和方法1方法2代码求FibonacciFibonacciFibonacci第nnn项斐波那契数列是这样的一个数列,1,2,3,5,8...,1,2,3,5,8...,1,2,3,5,8...即前两项都是111,后面每一项都是其前面两项的和。现在要你求出该数列的第n项。(n<=2∗1092*10^92∗109)方法1: 我们都知道FibonacciFi原创 2020-10-06 19:58:52 · 228 阅读 · 0 评论 -
快速幂 && 快速乘
文章目录思想快速幂,一个神奇的算法。思想我们先思考一个问题:aaa的bbb次方模kkk的值。原创 2020-09-24 20:19:36 · 89 阅读 · 0 评论 -
How Far Away?
文章目录题目描述思路代码题目描述村子里有nnn栋房屋,有一些双向道路将它们连接起来。每天,peoplepeoplepeople总是喜欢这样问:“如果我想从房子AAA到房子BBB多远?” 通常很难回答。但是幸运的是,这个村庄的答案始终是唯一的,因为道路的建造方式是每两栋房屋之间都有一条唯一的简单路径(“简单”意味着您不能两次访问某个地方)。您的任务是回答所有这些好you奇bing的人。输入格式第一行是单个整数TTT(T<=10T <= 10T<=10),表示测试用例的数量。对于每个原创 2020-09-23 20:48:39 · 371 阅读 · 1 评论 -
LCA算法 && 倍增
#include <bits/stdc++.h>#include <queue>using namespace std;int n,q,head[100005],cnt,d[100005],f[100005][105];struct node{ int to,next; }a[200005];void add_edge(int u,int v) { a[++cnt].to=v,a[cnt].next=head[u]; head[u]=cnt;}void bfs(原创 2020-09-23 13:23:44 · 525 阅读 · 0 评论 -
ST算法 && RMQ问题
文章目录思路预处理代码(求最大值)预处理代码(求最小值)询问l−rl-rl−r最值代码【白话系列】倍增算法我们就直接讲一下RMQRMQRMQ(区间最值问题)问题。题目:求出数列aaa中下标在l−rl-rl−r之间的数的最大值是多少?(当然也可以求最小值)我们最简单的方法就是直接枚举l−rl-rl−r之间的数。但当数据过于大时,暴力就不太适合了。于是,STSTST算法应运而生。思路给定一个长度为nnn的数组aaa,STSTST算法可以能在O(N log N)O(N\ log原创 2020-09-21 13:46:27 · 96 阅读 · 0 评论 -
二分和三分
文章目录二分原理代码:三分原理代码二分二分,一个简单而神奇的算法,可以简化时间复杂度,但是用二分有一个条件,就是我们进行二分的序列必须有单调性。原理我们直接上一个栗子:从一个单调上升序列aaa中找一个数xxx(保证xxx一定存在)。我们可以用朴素算法,直接从头到尾找一遍,时间复杂度O(n)O(n)O(n)。如果当序列aaa的长度十分大时,这种方法就不好用了。二分横空出世。我们每次寻找左右边界的中间。如果这个数大于xxx,右边界就等于中间。否则,左边界就等于中间。知道找到答案。代码:原创 2020-09-02 20:47:45 · 115 阅读 · 0 评论 -
读入输出优化
int read() { int f=1,x=0;char c=getchar(); while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();} while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+(c^48);c=getchar();} return x*=f;}void write(int x) { int y=10,len=1; if(x<0) {原创 2020-08-22 19:50:41 · 111 阅读 · 0 评论 -
高精度算法
文章目录1.原理接受:进位,借位处理:1.加法进位:2.减法借位:3.乘法进位:加法代码:减法代码:乘法代码:除法代码:福利:四则运算压位:听lhy说,高精度要考试,所以写一篇来临时抱佛脚在某些题中,有可能数据范围非常大,我们无法用一个变量来存,我们就需要用高精度。1.原理简单,我们就是用一个数组来进行存储一个数,你可以一个变量存一个数位,也可以一个变量存多个数位,也叫压位(只要不超过其范围即可)。接受:int a[1005],len;void inin() { char al[1005];原创 2020-08-09 20:06:17 · 171 阅读 · 0 评论