
模板
jinglinxiao
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU-1754-I hate it (线段树RMQ)
建树,修改,求值。。 #include #include #define LL(x) x<<1 #define RR(x) x<<1|1 using namespace std; const int maxn=2e5+7; const int INF=-1e9+7; int a[maxn<<2]; void build(int now,int l,int r) { if(l==r)原创 2017-01-15 12:05:03 · 282 阅读 · 0 评论 -
HDU-1540-Tunnel Warfare(线段树求最大连续子区间)
要求最大连续子区间,那么就要使用线段树维护三个东西:①区间最长连续前缀ll②区间最长连续后缀rl③区间最长子区间ml 建树时,让ll,rl,ml都是r-l+1。 更新时,根据要更新的结点向下,当下方结点的rl,ll,ml更新完毕后,更新当前结点的rl,ml,ll。 查询时,更具要查询的结点p向下,对于某一个区间,如果p>=mid-rl+1,那么说明这个结点在左半区间的后缀部分是连续的,那么r原创 2017-01-16 16:43:09 · 440 阅读 · 0 评论 -
矩阵行列式计算
矩阵行列式计算要求矩阵行列式,需要通过初等变换使得矩阵变为三角矩阵,然后对角线元素之积就是矩阵行列式的值。但是一般的初等变换可能导致浮点数的产生从而影响精度。因此这里使用辗转相除法进行初等变换。本算法是将其转化为上三角矩阵。因此从第一行开始,处理第 ii行 时,要将第 (i+1)(i+1) 行到第 nn 行的第 ii 列的元素转化为 00 ,这样处理完成后就是上三角矩阵了。对于第 ii 行,处理第原创 2017-02-27 20:45:24 · 17508 阅读 · 0 评论 -
UVA-11183- Teen Girl Squad(最小树形图模板)
题目链接:UVA-11183- Teen Girl Squad最小树形图,套模板即可。#include<bits/stdc++.h> using namespace std; const int INF=1e9+7; int n,m; struct Edge{ int u,v,d; }; Edge edges[40007]; int in[1007],vis[1007],id[1007原创 2017-02-21 18:08:22 · 563 阅读 · 0 评论 -
USACO - Riding the Fences (Fleury算法找欧拉路径/欧拉回路模板)
一个blog题目链接:USACO - Riding the Fences 题意是给定一个图,找到一个描述欧拉路径/欧拉回路的序列,使得序列的字典序最小。可以用Fleury算法找,实质上是一个dfs。 Fleury算法简单描述就是,每经过一条边,将其删除。当到达一个点时,需要选择一条边进入下一个点,这条边一定不能是割边,否则进去就出不来了,这样就能找到一条欧拉路。 具体用了栈来实现。每经过一个点原创 2017-03-18 12:32:59 · 714 阅读 · 0 评论 -
CCCC训练练习题-矿工安全生产(求点割集)
题目链接:矿工安全生产简单说一下就是给定一个无向联通图。要求找到割点(割点:若将该点和关联该点的边去掉,图的连通性发生改变),并把割点删去。求联通图的数量及在每个联通图上的某一个点放置一个救生器材的方案数。我们先要找割点。 找割点的方法其实和找割边有异曲同工之妙。从一点开始dfs该图可以得到一棵dfs树,设dfs开始的结点为根 rtrt 。 在dfs树中: 1.对于根结点,若它有两棵或两棵以上原创 2017-03-22 00:18:12 · 907 阅读 · 0 评论 -
c++11::std::unordered_map::demo
#include<string> #include<iostream> #include<unordered_map> using namespace std; struct Node { string s; }; hash<string> h; struct hashcode { size_t operator () (const Node & r) const {原创 2017-03-24 21:21:07 · 726 阅读 · 0 评论 -
树链剖分(SPOJ-QTREE)(模板)
先推荐一个菊苣的博客讲解 。对于这种查询树链,修改树边的问题,我们可以使用树链剖分。首先处理出重边和轻边:① uu 和 son[u]son[u] 为重边,当且仅当 son[u]son[u] 是 uu 的所有点中,其子树点数最多的。②不是重边的边为轻边。由重边形成的链为重链。性质:①从根节点到任意点的轻边数量为 O(logn)O(logn) 。证明:轻边的两端点的子树点数之差至少为2倍。②从根节点到任原创 2017-06-08 22:55:39 · 457 阅读 · 0 评论 -
线性筛求欧拉函数
线性复杂度的原因是因为它保证了每个合数只会被筛到一次。 每个合数都可以表示成一个数与另一个质数的乘积。 当 if(i%p[j]==0) 时 break 是因为大于p[j]p[j] 的那些素数 xx 产生的乘积 i∗xi*x 并不需要由ii来筛得,而可以由 i∗xi*x 的某个更大的合数因子来筛得,因为 ii 至少有一个比 xx 小的素数因子。void init() { int c=0;原创 2017-08-20 16:58:40 · 631 阅读 · 0 评论 -
HDU-2586-How far away ?(倍增求LCA模板)
题目链接:HDU-2586-How far away ?倍增求LCA: 1.先转化成有根树。 2.dfs求出每个点的深度 3.初始化anc数组 4.倍增查询#include<bits/stdc++.h> using namespace std; const int maxn=4e4+7; int anc[maxn][20],deep[maxn],d[maxn],k; int rt,n; st原创 2017-03-28 18:33:07 · 747 阅读 · 0 评论 -
后缀数组
后缀数组 sa[i]sa[i] 是将一个字符串 ss 的所有后缀根据字典序排序后,排名为 ii 的后缀的第一个字母在 ss 中的位置。 求后缀数组有 O(nlogn)O(nlogn) 的倍增求法。根据字典序的性质,求字符串的字典序排名只要找到一个长度 kk ,使所有字符串变成长度为 kk 的字符串,大于 kk 的截取,小于 kk 的补0 。因此倍增 kk 直到所有字符串都不相等即可找到他们的字典序原创 2017-06-13 12:44:37 · 330 阅读 · 0 评论