自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 Tarjan算法求强连通分量、割点、割边

算法应用:求解有向图的强连通分量Tarjan算法涉及的变量:dfnudfn_{u}dfnu​: 深度优先搜索遍历时结点uuu被搜索的次序lowulow_{u}lowu​: 能够回溯到的最早的已经在栈中的结点。设以uuu为根的子树为subtreeusubtree_{u}subtreeu​。 lowulow_{u}lowu​定义为以下结点的dfndfndfn的最小值:subtreeusubtree_{u}subtreeu​中的结点;从subtreeusubtree_{u}subtreeu​ 通过一条不在

2022-01-30 14:22:18 1115

原创 网络流——刷题记录

POJ 3041 Asteroids链接简述:N*N的坐标系,有K颗行星,一次可以消灭一行或者一列行星,最少需要几次?方案:以横坐标方向和纵坐标方向的坐标为点,建立顶点两个顶点集,行星(x,y)则变成由横坐标点x指向纵坐标y的点,进行一个二分图的建立二分图中,最小顶点覆盖等于最大匹配,因此问题可以变成一个二分图匹配问题。最后使用网络流求解。...

2022-01-25 17:13:24 246

原创 JNUACM俱乐部第二次博客点评(2021.11.17)

图论最短路-dijkstra博客1在最开始就注明该算法能解决的问题,我觉得是一个好习惯,这样子能够方便自己更加深刻地记住学到的算法的应用范围。博客使用图对一个具体的样例进行分析,有助于理解记忆,不过最好还是多放点例题比较好。拓扑排序博客1想用邻接表的话,可以考虑直接用vector吧,毕竟指针这东西还是慎用。DP博客1DP同样也是得靠题数练,这位大人的题量比较大,题解也写了不少,写题解时有条件可以把每道题的状态转移方程都写出来,方便自己重温记忆。这里建议想要深入学习请咨询圣XXX大人博客2

2021-11-17 22:00:13 285

转载 【JNUACM俱乐部转载】字典树

字典树Trie一般支持两个操作:Trie.insert(W):第一个操作是插入操作,就是将一个字符串W加入到集合中。Trie.search(S):第二个操作是查询操作,就是查询一个字符串S是不是在集合中。数组方式实现要写代码实现一个Trie首先就要确定如何存储一个Trie结构。这里用一个二维数组来存储:int trie[MAX_NODE][CHARSET];int k;#include<cstdio>#include<iostream>#inc

2021-11-01 19:42:51 103

原创 AC自动机粗学

前言——不明觉厉的算法排名第一位必要的前置知识KMP字典树什么是AC自动机AC自动机以字典树结构为基础,结合KMP的思想建立简单来讲,建立一个AC自动机有两个步骤:第一步: 建立字典树,将所有的模式串插入,构成一棵字典树第二步:依据KMP的思想,对字典树上的所有结点构造失配指针AC自动机解决什么问题?有多个模式串的匹配问题,即多模匹配问题字典树的构建点击这里快速回忆失配指针的构造AC自动机使用fail指针来帮助多模式串进行匹配树上结点u的fail指针指向另一个树上结点v,u和

2021-10-24 20:20:15 109

原创 JNUACM俱乐部第一次博客点评(2021.10.21)

因笔者个人实力有限,极有可能出现各种主观的,片面的,不正确的论断,欢迎各位在下面对线。那么,接下来就开始本次博客点评(没说到的都是文件)关于DFS和BFS的博客1作者以例题引入,使用图文结合的形式,比较仔细的介绍了DFS和DFS的方法,读起来很赏心悦目,并附上了模板和部分练习,写的不错。关于数论的博客1作者整理了部分数论的板子,不过最好能够将例题或者适用范围再写的清楚一点,以免要用到时候记不起来。关于数论的博客2同样是整理了数论板子,但写的细不少,建议作者1可以模仿一下关于数论的

2021-10-21 21:27:58 180 1

原创 Manacher(解决回文串问题的简单算法)

前置定义d1[]和d2[]对于一个字符串的每个位置 i=0,1,…,n-1,我们找出值d1[i]和d2[i]。二者分别表示以位置i为中心的长度为奇数和长度为偶数的回文串个数。求回文串朴素算法就是针对每一个位置i,朝两侧遍历并判断。// C++ Versionvector<int> d1(n), d2(n);for (int i = 0; i < n; i++) { d1[i] = 1; while (0 <= i - d1[i] && i + d

2021-10-03 14:41:38 162

原创 前缀函数与KMP

前缀函数定义:一个长度为n的字符串s,其前缀函数被定义为一个长度为n的数组Π,其中Π[i]的定义是:如果子串s[0…i]有一对相等的真前缀与真后缀,即存在s[0,k-1]=s[i-(k-1),i],那么Π[i]就是这个相等的真前缀的长度k,得到Π[i]=k如果不止一对相等,Π[i]=max(k)如果没有相等的,那么Π[i]=0用于优化的性质:相邻的前缀函数值至多增加1,增加条件为s[i+1]==s[Π[i]],所以当移动到下一个位置时,前缀函数的值要么增加1,要么维持不变,要么减少,循环可

2021-09-24 22:09:43 266

原创 字典树粗学

什么是字典树?字典树使用边来表示字母,从根节点到树上某一结点的路径表示了一个字符串。字典树的特点1.使用边来表示字母2.有相同字母的单词公用前缀节点,每个节点最多有N个子节点(N为该字符串包含的字符种类)3.根节点为空4.每个单词结束时,在该节点添加标记flag以表示这段路径是一个单词而非前缀...

2021-09-09 14:30:36 198

原创 codeforces1328E. Tree Queries(树上点祖先的判断)

题目链接题目大意:给你一棵树,根为节点1,进行m次查询,每次查询k个节点。判断是否存在一条由根到节点u的路径,使k个节点在这条路径上或距离这条路径距离不大于1.思路:每次选取距离根深度最深的点fv,因为深度最深的点总是最难满足条件的点,剩下的k-1个点要么在路径上(是点fv的祖先),要么距离路径的距离为1(点集中点的第一个父结点是点fv的祖先),因为fv祖先的父结点还是 fv的祖先,我们让所有点都找到它的父结点,便于判断条件。这样,就把问题转换成了判断剩下 k-1个点的父结点是不是fv的祖先。之后

2021-05-11 21:26:08 373 1

原创 CF1514C. Product 1 Modulo N(数论)(补题)

题目链接大意:给你一个数n,让你从1至n-1中选择最多的数相乘,使乘积模n为1.先说结论:选出所有与n互质的数进行相乘(1)乘积模n为1,满足条件,输出这些数(2)乘积模n不为1,设p=乘积%n。将数p从答案中拿出,输出剩余的数为什么结论成立:(1)为什么要取所有互质的数,取不互质的可以吗?答:当你选取了一个与n不互质的数进行相乘,你的乘积prod(以下称为prod)将不再与n互质,这意味着prod%n可变为(此时设g=gcd(n,prod))prod%n=(prod/g)%(n/g)*g

2021-04-20 09:05:39 310 1

转载 CF898 F. Restoring the Expression

题目链接题目大意:给你长度为n的一个字符串,将其拆分成三部分a,b,c,使其三者相加恰好是一个正确的数学求和式a+b=c思路:首先,将整个字符串拆分成n个高精度数,之后运用字符串哈希的方法,将每一个高精度数转换成对应的哈希值,便于求和检查是否相等。在这之后,遍历c的所有可能长度,由于 a和b的长度必然不会大于c, 可知:前面两式,一个式子长度可能为lenc或lenc-1,另一个就是 n-2 * len2或n-2 * lenc+1 ,在这个结论的基础上,利用式子的哈希值判断它们相加是否满足题目条件,

2021-04-10 12:01:51 137

原创 CF1358D. The Best Vacation

题目链接思路:尺取+贪心请看注释!#include<iostream>#include<cstdio>#include<algorithm>#include<string>#define fast ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)#define ll long long#define endl "\n"using namespace std;const int

2021-03-17 19:03:11 112

原创 codeforces1363E. Tree Shuffling(树形DP与贪心处理 )

题目连接话不多说,请看代码与注释#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<vector>#define fast ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)#define ll long long#define endl "\n"using names

2021-03-15 19:28:43 91

原创 codeforces1491C. Pekora and Trampoline

题目链接思路见注释这是一道贪心+差分#include<iostream>#include<cstdio>#include<algorithm>#include<string>#define fast ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)#define ll long long#define endl "\n"using namespace std;const i.

2021-03-02 12:55:28 126

原创 codeforces1492D. Genius‘s Gambit(构造)

题目链接题目大意:给你三个整数a,b,k,找两个二进制数X,Y,都有a个0,b个1,使X-Y刚好有k个1.两个二进制数都必须以1为首思路:对于给予的三个数进行不同情形的讨论第一种情况:k=0时此时只要两个数相同即可满足条件,输出b个1与a个0两次即可。第二种情况:0<k ≤\leq≤ a+b-2时需要再细分为情形(1):a=0或b=1a=0或b=1时,都只能固定生成111111111…(100000000…)X与Y相同,不满足条件。情形(2):a > 0且b > 1

2021-02-24 22:26:46 149

原创 洛谷P3758 [TJOI2017]可乐

原题链接题目描述加里敦星球的人们特别喜欢喝可乐。因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的 11 号城市上。这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆。它每一秒都会随机触发一种行为。现在给加里敦星球城市图,在第 00 秒时可乐机器人在 11 号城市,问经过了 tt 秒,可乐机器人的行为方案数是多少?输入格式第一行输入两个正整数 NN,MM。NN 表示城市个数,MM 表示道路个数。接下来 MM 行每行两个整数 uu,vv,表示 uu,vv 之间有一条道路。

2021-02-22 22:44:50 211

原创 CF1475 E. Advertising Agency

题目的镜像网站链接题目大意给你n个数,选出其中的k个数,使这k个数的和最大,求总共有多少种选法,满足题目的要求。思路先对这n个数进行从大到小的排序,找到前k大的n个数,为了保证和是最大的,只能改变k个数中最小的数MINNUM的选择情况,因为比MINNUM 大的数会被全部选中,即会出现Cnn=1,C_{n}^{n}= 1,Cnn​=1,的情况,因此只有最后一个数与和它等值的数在k个数中与n个数中的分布情况,会决定最后的答案。假设在k个数中,共有M个值为MINNUM,在n个数中,有N个值为MINNUM

2021-01-27 15:55:27 242 2

原创 洛谷P1395 会议(图论,树形DP)

洛谷P1395 会议(图论,树形DP)题目描述有一个村庄居住着n个村民,有n-1条路径使得这n个村民的家联通,每条路径的长度都为1。现在村长希望在某个村民家中召开一场会议,村长希望所有村民到会议地点的距离之和最小,那么村长应该要把会议地点设置在哪个村民的家中,并且这个距离总和最小是多少?若有多个节点都满足条件,则选择节点编号最小的那个点。输入格式第一行。一个数n,表示有n个村民。接下来n-1行,每行两个数字a和b,表示村民a的家和村民b的家之间存在一条路径。输出格式一行输出两个数字x和yx表

2021-01-24 18:04:55 354

原创 【数据结构】哈夫曼树的创建与基础应用

根据给定的n个权值生成哈夫曼二叉树,输出赫夫曼编码及进行译码哈夫曼树的结点的结构体struct huffmannode//哈夫曼树结点的结构体 { int weight;//结点权重 int parent;//父结点 int leftchild;//左子树 int rightchild; //右子树 };建树void creat_tree(huffmannode tree[], int w[],int n)//建哈夫曼树 { int node1 = 0, nod

2020-12-04 14:47:01 542 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除