![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
>算法集合(_▽_)<
MaywrILoi
这个作者很懒,什么都没留下…
展开
-
二分姿势
牢记二分姿势:while(r-l>1){ int mid=(l+r)>>1; if(check(mid)) l=mid; else r=mid;}原创 2017-10-21 15:55:56 · 340 阅读 · 1 评论 -
Codevs2404糖果——差分约束系统整理
http://codevs.cn/problem/2404/ 典型的差分约束系统,给定多个约束条件,求满足条件的答案最小,最大值等。 对于一个差分约束系统,我们可以将其转化为一个不等式组,然后据此建边跑最短路算法。为什么要建边跑最短路算法呢? 观察,在单元最短路问题中存在如下的三角形不等式 对于最短路有:f + v <=t,即 f - t <=-v 或 t - f >=v 对于最长路有:f原创 2017-10-24 16:21:02 · 287 阅读 · 0 评论 -
形形色色的水果姐逛水果街——codevs水果姐逛水果街1-3:线段树与ST表
这次的注释可能略显繁琐,但是是我认真写的帮助大家理解也帮助自己回顾,本文中重复部分不再添加注释,还请查看之前的部分作参考。 http://codevs.cn/problem/3304/水果姐逛水果街Ⅰ//线段树版本#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>usi原创 2017-09-27 16:13:14 · 429 阅读 · 0 评论 -
Codevs 2370 小机房的树
http://codevs.cn/problem/2370/ 倍增LCA版本代码 #include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;int n,m,u,v,c,tot;int next[50001*2],first[5000原创 2017-11-09 11:01:41 · 273 阅读 · 0 评论 -
Codevs 2173 忠诚
http://codevs.cn/problem/2173/ ST表 代码 #include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int n,m,a,b,minx;int num[100010],d[100010][20];v原创 2017-11-09 11:03:26 · 253 阅读 · 0 评论 -
Codevs2461反质数
http://codevs.cn/problem/2461/Codevs2912,洛谷P1463与此题完全相同…. 虽然分别是06浙江07河南和05山东的省队选拔赛题目….. 注意题目有问题..是求最小的反质数。思路 首先要明确一个结论: 某一个数的因子数 = 组成这个数的各质因子数的次数+1的乘积。可以由唯一分解定理和乘法原理得到。 这是我们统计因子数的计算式。 那么我们就将一个反质数原创 2017-11-02 19:19:12 · 185 阅读 · 0 评论 -
Codevs 2822 爱在心中
http://codevs.cn/problem/2822/ 思路 Tarjin算法找出图中所有的节点数>1的环即爱心天使,将每个爱心天使缩成一个点,重新建图,在新图中找到一个入度为0的点(至多一个),只有此点可能被所有人爱。 那么我们在建图的时候反向建边,看此点能否走到其他所有点即可。 代码 #include<iostream>#include<cstdio>#include<algor原创 2017-11-09 11:18:23 · 408 阅读 · 0 评论 -
Tarjin算法求桥和割点模板
定义 存在于无向图中。 割点:删除此点使得图中连通块数量增加。 桥(割边):删除此边使得图中连通块数量增加——割点于割点之间的直接连边为桥。 判断割点方法: 1.u为树根,且u有多于一个子树。 2.u不为树根,且存在(u,v)为树枝边(或称父子边,即u为v在搜索树中的父亲),使得dfn(u)<=low(v)。 也就是u的子树中的v点无法到达u之前的点,所以去掉u点就是两个连通分支,所以原创 2017-11-09 11:27:41 · 590 阅读 · 0 评论 -
洛谷 P3093 牛奶调度Milk Scheduling
https://www.luogu.org/problemnew/show/3093 思路 详见代码注释 代码 #include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<queue>using namespace std;int n,maxn,now,an原创 2017-11-08 20:36:04 · 422 阅读 · 0 评论 -
Codevs1074食物链
http://codevs.cn/problem/1074/ 加权并查集/扩展域并查集的经典题目方案一:加权并查集思路 我们设rank[i]记录记录i到其father的关系(或言距离),有0,1,2三种表示同类,吃与被吃 ,然后注意在路径压缩时维护此关系,当新得到的两只动物的关系已经被确定是判断此时关系是否矛盾,合并时确定新增关系(u与v)。 一定要注意:食物链为环状结构。 在这里解释两处对原创 2017-10-28 10:52:14 · 265 阅读 · 0 评论 -
Codevs3315时空跳跃者的魔法
思路 将各奇点到其他奇点位置的消耗作为边的权值算出边来,做MST即可。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int n,tot,ls,cost;int u[1000010],v[1000010],w[1000010原创 2017-10-24 17:24:11 · 192 阅读 · 0 评论 -
KMP模板
https://www.luogu.org/problem/lists?name=3375洛谷P3375KMP字符串匹配 这个算法真是精妙~#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int len1,len2,tot;原创 2017-10-24 17:27:42 · 204 阅读 · 0 评论 -
A*模板
求第k短路。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<queue>using namespace std;const int INF = 1e9+7;int n,m,ts,te,k,tot1,tot2,ru,rv,rw;int first原创 2017-10-26 07:35:11 · 454 阅读 · 0 评论 -
Codevs1332上白泽慧音
http://codevs.cn/problem/1332/ Tarjin裸题卡输出…代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int n,m,ru,rv,rw,tot,cnt,num,p,maxn;int fir原创 2017-11-02 18:49:48 · 243 阅读 · 0 评论 -
Codevs2604舞会邀请
http://codevs.cn/problem/2604/按可扩展的节点数从大到小选取,直到通知到所有点为止…这个数据范围怎样花式做都可以啦~代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int n,ans,tmp,to原创 2017-11-02 18:53:29 · 202 阅读 · 0 评论 -
Codevs2488绿豆蛙的归宿
http://codevs.cn/problem/2488/ 思路 题目保证所有点都可以到达终点,则开始时加入队列的点有且仅有终点,且使得通过反向topsort/search 得到的期望与正向是相同的,并且起点到终点的期望始终等于终点到起点的期望 1. 正向DFS只需要记录可以到达n的路径的期望,依次传参找到终点再加入答案 反向DFS记录可以到达1的路径的期望,依次传参找到起点再加入原创 2017-10-23 00:08:57 · 239 阅读 · 0 评论 -
洛谷 P2309 loidc 卖卖萌
https://www.luogu.org/problemnew/show/P2309 思路 求一下前缀和,如有Si-Sj>0,即Si>Sj 则j+1到i的子段和>0 ans = 正序对个数+0到i的子段和中>0的个数即前缀和>0的个数 代码 #include<iostream>#include<cstdio>#include<algorithm>#include<cstring原创 2017-11-09 08:20:37 · 352 阅读 · 0 评论 -
背包问题整理
准确一点说是对背包九讲的学习笔记 …思想和方法:在学习过程中了解的求解DP问题的思想,以及部分细节方法1.DP初始化为一已知的合法解 2.滚动数组优化 3.”拆分物品”的思想和方法 4.当发现由熟悉的动态规划题目变形得来的题目时,在原来的状态中加一维以满足新的限制是一种比较通用的方法01背包问题: 有N件物品和一个容量为V的背包,第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入原创 2017-10-31 21:17:09 · 296 阅读 · 0 评论 -
Codevs1540银河英雄传说
http://codevs.cn/problem/1540/ 思路 要加深对并查集的理解#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;int t,a,b;int fa[100010],pos[100010],sum[100010];//pos相对深度,su原创 2017-10-23 09:41:18 · 421 阅读 · 0 评论 -
NOIP2012借教室
http://codevs.cn/problem/1217/ 其实只要输出第一个被迫修改订单的人即可.. 二分法+差分优化#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;typedef long long ll;int l原创 2017-10-23 09:34:09 · 488 阅读 · 0 评论 -
NOIP2011选择客栈
求lcp : Trie + lca题目:https://www.luogu.org/problem/show?pid=1311挺有意思的一道题;先考虑n^2*k的做法; 开链表直接模拟; 用st表维护区间最小值;pre[i]:与i颜色相同的前一个客栈的位置; h[x]:最后一个颜色为x的客栈的位置;#include#include#include#转载 2017-10-23 09:25:12 · 1402 阅读 · 0 评论 -
洛谷P1197 [JSOI2008]星球大战
https://www.luogu.org/problem/show?pid=1197 思路 首先动态求割点会TLE,考虑倒序离线操作。 当所有打击完成后,Tarjin统计同一连通分量上的点,并查集维护连通性(实际上来说只要两点之间有边则将之合并即可Tarjin处理麻烦反而会MLE?..不清楚为什么)。再依次将被毁灭的星球复原,则对答案的影响只与当前星球连接的星球数量(及连通关系)有关,每次统原创 2017-10-23 08:31:34 · 304 阅读 · 0 评论 -
Codevs1995黑魔法师之门
http://codevs.cn/problem/1995/ 思路 对于题设条件:“图中每个点的度数大于零且都是偶数的子图”即为一个环。 当加入一条边的时候,计算此时图中环的个数。 当图中两个点已经连通时,又在两点间加入一条边,则产生新的环。 此时子图数=原图子图数*2+1 意义为:原图中环的个数+使用新增的一条边替换两点原边的个数+原边于新增边形成的环的个数(1) 并查集维护环上点的原创 2017-10-23 10:27:39 · 254 阅读 · 0 评论 -
洛谷P2898haybale猜测Haybale Guessing
https://www.luogu.org/problemnew/show/2898思路 显然,若按照题目给定的顺序处理,判断过程将异常麻烦…. 但仔细分析题目后发现,本题对矛盾的产生有着诸多限制在。 那么我们可以考虑,对于矛盾的情况下一个统一定义。 对于本题,则为“若某一确定了最小值的区间,被一个或多个最小值比他大的区间完全覆盖,那么此时的情况就是矛盾的。”—— 注意适当的将此种方法扩展到原创 2017-11-04 08:31:46 · 373 阅读 · 0 评论 -
Codevs1191数轴染色
http://codevs.cn/problem/1191/思路 方法一:线段树 显然线段树可以很方便的维护区间内黑色点的数量,我们在每次染色之前求一下染色区间内黑色点的个数,即为此次染色后将要减少的黑色点的个数,用当前总个数作差即为答案。染色过程当然也为线段树的区间修改。线段树代码#include<iostream>#include<cstdio>#include<algorithm>#原创 2017-11-02 19:55:21 · 415 阅读 · 1 评论 -
NOIP2010关押罪犯——10.20晚间演说ADA
http://codevs.cn/problem/1069/关押罪犯二分+二分图染色 二分最小值,染色判断是否可行#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int n,m,ru,rv,rw,tot,s,ans;int原创 2017-10-11 07:46:00 · 360 阅读 · 0 评论 -
Codevs1615数据备份
http://codevs.cn/problem/1615/ 思路: 方案一:O(n*k)的DP…只能得部分分。 首先我们知道,只选择相邻的点构成线段,答案一定不会变差。 因为若选择跨点连线,我们必然可以用其中相邻点构成的连线代替,且使得权值更小。 那么我们就只考虑相邻点构成的线段如何选取。 我们设dp[i][j][1/0]前i条线段选了j条线段是否选择当前线段(包括在j内) 每次用原创 2017-11-07 21:30:44 · 254 阅读 · 0 评论 -
二叉树的序遍历
二叉树的序遍历http://codevs.cn/problem/3143/ 二叉树的序遍历.模板题#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxn = 1010;struct point{ int l,r;}p[maxn];void build(int l原创 2017-10-11 23:05:42 · 178 阅读 · 0 评论 -
高精度加减乘法模板
高精度加减乘法模板加法:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int lena,lenb,lenc,x;char a1[1010],b1[1010];int a[1010],b[1010],c[1010];int原创 2017-10-11 10:43:48 · 261 阅读 · 0 评论 -
树的直径模板
树的直径模板http://codevs.cn/problem/1814/最长链.模板题 对于树上的最长链,有且仅有两种情况: #include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int n,tot,a,b,ans,pos;in原创 2017-10-11 00:07:03 · 815 阅读 · 0 评论 -
形形色色的线段树练习——codevs线段树练习1-5:线段树,树状数组及分块模板
形形色色的线段树练习http://codevs.cn/problem/1080/线段树练习1//线段树版本#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;typedef long long ll;int t,n,m,pos,原创 2017-09-24 14:45:18 · 441 阅读 · 2 评论 -
HDU 5500 Reorder the Books
http://acm.hdu.edu.cn/showproblem.php?pid=5500 代码 #include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int t,n,ans,maxn,pos;int num[1000010];原创 2017-11-08 20:34:19 · 205 阅读 · 0 评论 -
快速幂模板及应用
实现原理: a^b mod c = ((a^2)^b/2)mod c,b为偶数, a^b mod c = ((a^2)^b/2 * a)mod c,b为奇数。代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<ctime>using namespace std;typedef原创 2017-11-01 12:59:31 · 245 阅读 · 0 评论 -
二分图的染色与匹配
二分图:图中点集可分成两部分,使处于同一部分的点间没有连边 染色法,是一种简单地判断是否为二分图的方法. 对图中的每个点进行染色,使相临的点颜色不同,如果可以完成则为二分图,否则不为.BFS实现:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<qu原创 2017-09-30 11:54:53 · 467 阅读 · 0 评论