04 2017 档案
摘要:传送门 对于这个题,显然要打lazy标记了,但是lazy标记pushdown的时候肯定会增加一大堆节点,然后就MLE了。(题解这么说的,我其实不会pushdown) 所以,就换另一种方式,把标记直接打到当前区间,把当前区间的父亲节点大小都更新。求区间和的时候把沿途的标记都加起来就可以了。 注意分多钟
阅读全文
摘要:传送门 模板题一道,1A。 ——代码 1 #include <cstdio> 2 #include <algorithm> 3 #define ls son[now][0], l, mid 4 #define rs son[now][1], mid + 1, r 5 6 using namespac
阅读全文
摘要:传送门 又是一道主席树模板题,注意数组从0开始,还有主席树耗费空间很大,数组开大点,之前开小了莫名其妙TLE。QAQ ——代码 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define ls son[now][
阅读全文
摘要:传送门 AC自动机的又一模板,统计每个字符串在文本中的次数。 所以就不需要vis数组了。 ——代码 1 #include <cstdio> 2 #include <cstring> 3 #include <queue> 4 5 using namespace std; 6 7 int n, sz;
阅读全文
摘要:传送门 题目中文描述,赞! 除了val记录id以外就是模板。 注意:每次数组都要清0.0 ——代码 1 #include <cstdio> 2 #include <queue> 3 #include <cstring> 4 #include <algorithm> 5 6 using namespa
阅读全文
摘要:本蒟蒻会把一些做过的题和学习的算法或数据结构放到博客中。 博客中的东西是为了本蒟蒻复习用的,并不是对某一类问题的讲解,所以初学者就不要看本蒟蒻的博客了。 本蒟蒻大都是从别人博客上学习的,如有初学者要学习,还是看别人那些大神的博客吧,我会把别人的博客地址放出。 而且本蒟蒻很懒,博客写的一点都不好。 有
阅读全文
摘要:Keywords Search 一道模板题,但对于我这种初学者来说也是不好做的。 对于AC自动机的理解,本蒟蒻暂时还理解不好,不多说了。 看看这个人的blog。 ——本题代码 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio>
阅读全文
摘要:Kth number 划分树虽然可以做,但是代码不好记。 看某人blog学习了主席树的简单操作。 引用某大牛的话来解释一下主席树: 所谓主席树呢,就是对原来的数列[1..n]的每一个前缀[1..i](1≤i≤n)建立一棵线段树,线段树的每一个节点存某个前缀[1..i]中属于区间[L..R]的数一共有
阅读全文
摘要:传送门 看了看块状链表,就是数组和链表的合体。 看上去好高大尚,思想也很简单。 但是发现代码量也不是很小,而且代码理解起来也是费尽得很,倒不如splay用起来顺手。 在加上适用范围貌似不是特别广,所以只把模板贴在这,只当了解思想,暂时先不使用。(也不会用啊) 1 #include<iostream>
阅读全文
摘要:一.O(n+m) 暴力不多说 二.O(m) 1.构图 2.求图的极大强连通子图 3.把每个子图收缩成单个节点,根据原图关系构造一个有向无环图 4.判断是否有解,无解则输出(退出) 5.对新图进行拓扑排序 6.自底向上进行选择、删除 7.输出 对于此问题有两篇论文可看: 伍昱 由对称性解2-sat问题
阅读全文
摘要:传送门 2-sat问题,只需要判断yes或no 所以可以直接连边,缩点,判断同一组的是否在同一个块中。 1 #include <cstdio> 2 #include <stack> 3 #include <cstring> 4 #include <iostream> 5 #include <algo
阅读全文
摘要:坑,没找到模板题。 暂时先放一放。 有两种版本的,不知道那个比较好。 http://blog.csdn.net/u013497977/article/details/47188489 http://blog.csdn.net/fuyukai/article/details/51303292
阅读全文
摘要:K-th Number 多次询问一个静态区间里的第k大数。怎么搞? 暴力?(还是别想了) 多次构建树状数组?(和暴力有啥区别) 于是一个叫做划分树的东西就登场了。(据说还有个叫归并树的,速度慢一点,就不学了) 划分树详解 ——代码 1 #include <cstdio> 2 #include <al
阅读全文
摘要:洛谷传送门 入门难度。。 没错,但是我并不是要暴力做。 而是用树状数组来做。 先离散化,然后随便搞一搞就可以了。(晕。比暴力还慢) 如果要查找某一区间的的话可以把区间取出重新建树,然后再求。(更暴力) 1 #include <cstdio> 2 #include <vector> 3 #includ
阅读全文
摘要:洛谷传送门 虽然可以用归并排序求,但我实在记不住归并排序的代码。 还是树状数组和蔼点。 先离散化,树状数组就可以开小点,不过耗的时间多点。 ——代码 1 #include <cstdio> 2 #include <algorithm> 3 #define lowbit(x) x & -x 4 5 u
阅读全文
摘要:把暂时无法解决的问题先放在这,等以后对前置的算法或数据结构有更深的理解后再来学习。 二逼平衡树(树套树)传送门 AC自动机√ 后缀数组 点双联通分量 边双联通分量(这个。。知道怎么搞但没有实践过) 2-sat 主席树√ Little Devil I(树链剖分,然而不会了) http://www.cn
阅读全文
摘要:洛谷传送门 这道水题告诉了我,堆优化的prim有时还不如朴素prim快。。。 居然记错时间复杂度了,我也真是菜。 1 #include <cstdio> 2 #include <queue> 3 #include <cmath> 4 5 using namespace std; 6 7 int n;
阅读全文
摘要:简单的代码。。 时间复杂度为O((n + m)logn) 大部分情况下还是跑不过kruskal的,慎用。 1 #include <cstdio> 2 #include <queue> 3 #include <cstring> 4 #define heap pair<int, int> 5 6 usi
阅读全文
摘要:启发式合并——染色后的布丁也能吃
阅读全文
摘要:Treap——人和狗都收养
阅读全文
摘要:洛谷传送门 每次给出要争吵的猴子a和b,用并查集判断如果他们是朋友输出-1 如果不是,找出a,b在的堆的根A,B,分别合并A,B的左右孩子,再合并一下。 之后把A,B的数据更改一下:权值除以2,左右孩子设为0,再插入到堆中即可。 最后输出堆顶。 1 #include <iostream> 2 #in
阅读全文
摘要:洛谷模板题 一听左偏树这个名字就感觉左偏。。 左偏树是什么,好像就是个堆,大根堆或小根堆,可以支持合并,取堆顶元素,删除堆顶元素,插入元素的操作。 一些说明: 左偏树节点除了应有的东西,还有键值和距离,键值用于比较大小,距离是什么? 距离是这样定义的: 节点i称为外节点(external node)
阅读全文
摘要:洛谷传送门 输入时处理出最小的答案和最大的答案,然后二分答案即可。 其余细节看代码 1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 int n, m, a[100001], x, y, ans = 1000
阅读全文
摘要:洛谷传送门 直接tarjan求scc,然后统计出度为0的缩点,如果多余1个就输出0,只有一个就输出这个缩点里的点。 ——代码 1 #include <cstdio> 2 #include <cstring> 3 #include <stack> 4 5 using namespace std; 6
阅读全文
摘要:[ZJOI2008]树的统计 洛谷传送门 第一遍树链剖分,打的很难受。 其中拉闸了,检查真是费劲。 树链剖分是什么? 树链剖分,计算机术语,指一种对树进行划分的算法,它先通过轻重边剖分将树分为多条链,保证每个点属于且只属于一条链,然后再通过数据结构(树状数组、SBT、SPLAY、线段树等)来维护每一
阅读全文
摘要:洛谷传送门 带权二分图最大权完美匹配。 裸的km算法。 注意开long long。 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 5 using namespace std; 6 7 const long long
阅读全文
摘要:hdu2255模板题 KM是什么意思,详见百度百科。 总之知道它可以求二分图最大权完美匹配就可以了,时间复杂度为O(n^3)。 给张图。 二分图有了边权,求最大匹配下的最大权值。 所以该怎么做呢?对啊,怎么做呢? 我也不懂啊,看的别人博客。 然而并没有将思路,只是模拟了一遍。 核心是在当两个女生都匹
阅读全文
摘要:洛谷传送门 匈牙利算法+sort 没什么好说的。 ——代码 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 using namespace std; 6 7 int n, m, cnt, sum; 8 int n
阅读全文
摘要:转自:http://www.cnblogs.com/zarth/p/6417088.html 一、二分图最大匹配 定义:匹配是图中一些边的集合,且集合中任意两条边都没有公共点,所有的匹配中,边数最多的就是最大匹配。 算法:用匈牙利算法可以在O(V*E)的复杂度内求出二分图的最大匹配,具体可以看byv
阅读全文
摘要:洛谷传送门 题目描述: 给出N平行于坐标轴的线段,要你选出尽量多的线段使得这些线段两两没有交点(顶点也算),横的与横的,竖的与竖的线段之间保证没有交点,输出最多能选出多少条线段。 因为横的与横的,竖的与竖的没有交点,所以直接把相交的线段相连,然后肯定是个二分图。 选出多少个线段,就是求二分图的最大独
阅读全文
摘要:给你一个无向图, 让你判断这是不是一个二分图。 二分图的标准:可以把这个图的点分成两堆,试每条边都连接这两个堆里的点,而一个堆里的点不能相连。 无向图G为二分图的充分必要条件是,G至少有两个顶点, 且其所有回路的长度均为偶数。(???什么意思???) 语文不好,看图吧。 就这个意思。 而现在然你自己
阅读全文
摘要:题目链接 题目大意是说输入数字n 然后告诉你第i个人都认识谁? 让你把这些人分成两堆,使这每个堆里的人都互相认识。 做法:把不是互相认识的人建立一条边,则构建二分图,两堆的人肯定都互相认识,也就是说,互相认识的两个人肯定不相连。 ——代码 1 #include <cstdio> 2 #include
阅读全文
摘要:洛谷模板题 学了匈牙利算法。 匈牙利算法核心是找增广路经。 可以求出二分图的最大匹配数。 感觉还是挺好理解的。 时间复杂度 邻接矩阵: 邻接表: 空间复杂度 邻接矩阵: 邻接表: 看的这个blog,有些恶趣味。(受不了凤姐那张图。。) ——代码 1 #include <cstdio> 2 #incl
阅读全文
摘要:为了将最小费用最大流的spfa优化,决定将spfa换成heap优化的Dijkstra。(dijkstra不能处理负边权) 所以还得现学。。。 白点表示已经确定最短路径的点。 蓝点表示还未确定最短路径的点。 因为普通的dijkstra是每次从蓝点中找到一个距离起点的距离最小的点,然后把这个点变成白点,
阅读全文
摘要:洛谷模板题 没什么好说的,用spfa来找增广路。 1 #include <cstdio> 2 #include <cstring> 3 #include <queue> 4 5 using namespace std; 6 7 const int INF = 1 << 26; 8 int n, m,
阅读全文
摘要:——果断附isap代码 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 5 using std::min; 6 7 const int maxn = 200001; 8 9 int n, m, cnt, maxflow
阅读全文
摘要:洛谷传送门 看到这个题,原本想先从后往前dfs,求出能到终点的点,再在这些点里从前往后spfa,用一条边上的两个城市的商品价格的差来作边权,实施过后,发现图中既有负边权,又有回路,以及各种奇奇怪怪的东西。说实话我连样例都没过,然后提交一下试试,得了10分。 然而我发现,要求赚最多钱,就是到那个点的路
阅读全文
摘要:洛谷传送门 这道题可以把边都反着存一遍,从终点开始深搜,然后把到不了的点 和它们所指向的点都去掉。 最后在剩余的点里跑一遍spfa就可以了。 ——代码 #include <cstdio> #include <cstring> #include <queue> const int maxn = 100
阅读全文
摘要:洛谷割点模板题——传送门 割边:在连通图中,删除了连通图的某条边后,图不再连通。这样的边被称为割边,也叫做桥。割点:在连通图中,删除了连通图的某个点以及与这个点相连的边后,图不再连通。这样的点被称为割点。DFS搜索树:用DFS对图进行遍历时,按照遍历次序的不同,我们可以得到一棵DFS搜索树。 树边:
阅读全文
摘要:传送门 这道题,先用kruskal求一遍图中的最大生成树。 然后,倍增求lca,求lca的同时求出边权的最小值。 #include <cstring> #include <cstdio> #include <algorithm> int n, m, cnt, q, t, k; int f[10001
阅读全文
摘要:洛谷上的lca模板题——传送门 1.tarjan求lca 学了求lca的tarjan算法(离线),在洛谷上做模板题,结果后三个点超时。 又把询问改成链式前向星,才ok。 这个博客,tarjan分析的很详细。 附代码—— #include <cstdio> #include <cstring> con
阅读全文
摘要:人生的第一次hash交给了模板题。 讲道理,还没有别人快排要快,就比暴力快那么一点。。。 难道我写的hash就那么菜么? 我想了想,光是处理字符串就O(n*len)。。 这是hash的正确写法吗?我都开始怀疑自己了。 不管怎样,把代码附上,以后可能会用。 #include <cstdio> #inc
阅读全文
摘要:有人说这篇博客不是很友好,所以我加了点解释,感觉是不是友好多了? dfn[u]表示节点u在dfs时被访问的次序。 low[u]表示节点u能够追溯到的最远的祖先的dfn。 ins[u]表示节点u是否在栈中。 belong[u]表示节点u所属的SCC标号,也可以说可以缩成的点的标号。 若u的子节点v可以
阅读全文
摘要:洛谷传送门——分糖果 博客——链式前向星 团队中一道题,数据很大,只能用链式前向星存储,spfa求单源最短路。 可做模板。 #include <cstdio> #include <queue> #include <cstring> #include <algorithm> using namespa
阅读全文