-----模版
文章平均质量分 55
litmxs
博客内容如有错误,还望指正
展开
-
Peter and Snow Blower CodeForces - 614C 几何
题目链接: Peter and Snow Blower CodeForces - 614C 题目大意一个n边形, 顺时针方向给出所有顶点, 给你一个p点, 让n边形绕p点旋转, 求n边形扫过的面积(p点严格在n边形外, 我想这里的严格指的是如果多边形是凹的, 也不会在凹槽里面, 开始的时候我还判断了是否会在多边形里面…) 3≤n≤105,点坐标绝对值不超过1063 \leq n \leq 10^5原创 2017-07-21 21:09:03 · 490 阅读 · 0 评论 -
Aragorn's Story HDU - 3966 树链剖分 点权 区间更新 单点查询 模板
题目链接:HDU - 3966题目大意一棵树,结点数为n(n<=5e5),有两种操作,将结点c1和c2路径上所有结点的权值增加或减少k,查询结点c的权值思路树链剖分,用BIT(树状数组)进行更新和查询思路 Result Time(ms) Mem(MB) Length Lang Accepted 967 16.7 244...原创 2018-07-18 09:36:58 · 171 阅读 · 0 评论 -
树的重心 模板
删除重心后,子树的最大权值最小 dfs遍历每个点,node的所有子树除了它的儿子们还有它往父亲那个方向的一颗子树(权值=总权值-所有子树权值和-1) 下面的代码权值为边权#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 100, inf = 0x3f3f3f3f;int n, k;str...原创 2018-07-12 13:33:39 · 577 阅读 · 0 评论 -
2018 Multi-University Training Contest 1 1008 RMQ Similar Sequence 笛卡尔树 概率
题目链接:1008 RMQ Similar Sequence题目大意rmq(a, l, r)表示a[l-r]中最大值的下标,如果有相同的数字,取下标小的 定义rmq相似,如果两个数组a, b长度相同,对于所有[l, r],都有rmq(a, l, r) == rmq(b, l, r)则abrmq相似 现在给你一个数组a, 有一个数组b长度与a相同,且每一个元素都是从[0, 1]之间独...原创 2018-07-24 13:06:13 · 189 阅读 · 0 评论 -
小球和盒子
from: https://blog.csdn.net/jaihk662/article/details/79572685 问题列举:把n个不同的小球放在m不同的个盒子里,有空盒把n个不同的小球放在m不同的个盒子里,无空盒把n个不同的小球放在m相同的个盒子里,有空盒把n个不同的小球放在m相同的个盒子里,无空盒把n个相同的小球放在m不同的个盒子里,有空盒把n个相同的小球放在m不同的个...转载 2018-07-25 09:44:18 · 507 阅读 · 0 评论 -
2018 Multi-University Training Contest 2 1007 Naive Operations 线段树 区间更新区间查询
题目链接:1007 Naive Operations题目大意两个数组a和b, 长度为n,a一开始全都是0,b里面是1-n的排列 有两两种操作 add l, r : 将a数组[l, r]内所有元素+1 query l, r : 求∑ri=l⌊aibi⌋∑i=lr⌊aibi⌋\sum_{i = l}^{r} \lfloor \frac{a_i}{b_i} \rfloor思路线...原创 2018-07-25 17:33:20 · 133 阅读 · 0 评论 -
ext/rope和ext/pb_ds库
官方文档堆#include&lt;ext/pb_ds/priority_queue.hpp&gt;using namespace __gnu_pbds;__gnu_pbds::priority_queue&lt;node,less&lt;node&gt;,pairing_heap_tag&gt; pq;//如果using了std, 必须显示表面名称空间__gnu_pbdsjoin...原创 2018-07-27 16:37:25 · 1302 阅读 · 0 评论 -
差分标记
次数 a1a1a_1 a2a2a_2 a3a3a_3 a4a4a_4 a5a5a_5 通项 一次 1 1 1 1 1 an=1an=1a_n = 1 二次 1 2 3 4 5 an=nan=na_n = n 三次 1 3 6 10 15 an=n(n+1)2an=...原创 2018-08-05 12:28:47 · 338 阅读 · 0 评论 -
组合数 模板
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5 + 100, mod = 1e9 + 7;ll inv[maxn], fac[maxn], finv[maxn];//逆元, 阶乘, 阶乘逆元void init(){ inv[1] = 1; ...原创 2018-08-02 10:09:08 · 139 阅读 · 0 评论 -
Treap kth rank 模版
#include &lt;bits/stdc++.h&gt;using namespace std;const int maxn = 1e5 + 100;struct Node{ Node * ch[2]; int r, v, s; Node (int v = 0): v(v) { ch[0] = ch[1] = nullptr; ...原创 2018-08-20 11:29:35 · 228 阅读 · 0 评论 -
ACM-ICPC 2018 焦作赛区网络预赛 E. Jiu Yuan Wants to Eat 树链剖分 线段树
题目链接:Jiu Yuan Wants to Eat题目大意一颗树,n各节点(n≤105n≤105n \leq 10^5)每个节点上有一个值aiaia_i(ai≤264)ai≤264)a_i \leq 2^{64}) 有四种操作 1. 将u到v路径上所有节点值乘以x(x≤264)x≤264)x \leq 2^{64}) 2. 将u到v路径上所有节点值加上x(x≤264)x≤264...原创 2018-09-15 18:07:36 · 300 阅读 · 0 评论 -
线性素数筛 模板
const int MAXN = 1e8+1000;int prime[MAXN/10];bool is_prime[MAXN+1] = {0};int getprime(int n){ int tot = 1; prime[0] = 2; is_prime[2] = true; for(int i=3; i<=n; i+=2) is_prime[i...原创 2018-09-15 18:14:24 · 250 阅读 · 0 评论 -
Query on a tree SPOJ - QTREE 树链剖分 模板
题目链接:Query on a tree题目大意一棵树,有n个节点n<=1e4, 有两种操作:1.求节点a和b之间路径的最大权值的边;2. 将边i的权值改为ti思路树链剖分,边的权值存在儿子节点上,线段树求区间值和修改代码#include <bits/stdc++.h>using namespace std;typedef long lon...原创 2018-07-17 16:35:50 · 157 阅读 · 0 评论 -
Codeforces Round #378 (Div. 2) F. Drivers Dissatisfaction图论 树链剖分 最小生成树+最近公共祖先+倍增法或树链剖分 模板
题目链接:F. Drivers Dissatisfaction题目大意无向图有n个节点,m条边,每条边有wiwiw_i(边的权值),cicic_i(让wiwiw_i减少1需要花费ci)ci)c_i)两个属性 现在有预算S,可以用这些钱让一些边的权值减小(边的权值可以减少到0甚至负数) 设计一个方案,减小某些边的权值,使得这张图的最小生成树的权重和最小 输出最小生成树的权值和,以及最小...原创 2018-07-12 13:03:39 · 272 阅读 · 0 评论 -
Educational Codeforces Round 46 (Rated for Div. 2) E. We Need More Bosses 图论 桥
题目链接: E. We Need More Bosses题目大意:一个无向图, n个节点, m条边,选择两个节点s和t, 使得从s到t所有路径中都出现的边的数量最大(从s到t无论怎么走都必须要经过这些边)思路无向图中,在两点间所有路径出现的边为无向图的桥, 将所有非桥边的权值设为0, 桥的权值设为1(即将边双联通分量缩成一个点),求得出的无向图最长路径,即为答案桥与割点定...原创 2018-07-09 13:46:11 · 272 阅读 · 0 评论 -
Codeforces Round #425 (Div. 2) D. Misha, Grisha and Underground LCA模版
题目链接: Misha, Grisha and Underground题目大意给你一颗无根树 三个顶点f, s, t, 计算f到s的最短路径和f到t的最短路径的公共顶点个数 给你三个点a, b, c, 求如何将a, b, c对应到f, s, t, 使得上面描述的公共顶点个数最多, 输出最多的公共顶点个数思路将顶点1定义为树根, 求出所有顶点到树根的最短路长度depth[i] 那么两个顶点u,原创 2017-07-25 18:06:16 · 431 阅读 · 0 评论 -
Strictly Positive Matrix CodeForces - 402E 强联通分量 模版
题目链接: CodeForces - 402E题目大意给你一个n*n的矩阵, 每个元素>=0, 可以对这个矩阵做任意次方的乘方操作, 求能不能的到一个所有元素>0的矩阵思路将这个矩阵看作图的邻接矩阵, 非零为有边, 那么对这个矩阵做乘方就相当于离散数学里面求传递闭包的方法嘛…最后的到的矩阵aija_{ij}为1表示原来图中ij有路径相连, 要整个矩阵都为1, 说明原图是强联通图, 也就是强联通分量为原创 2017-07-27 13:49:38 · 397 阅读 · 0 评论 -
匹配
二分匹配染色法判断二分图#include <bits/stdc++.h>using namespace std;const int MAXN = 300;int n, m;vector<int> G[MAXN];int col[MAXN];bool dfs1(int v, int c){ col[v] = c; for(int i=0; i<(int)G[v].size()原创 2017-07-11 10:12:57 · 208 阅读 · 0 评论 -
AC自动机
AC自动机算法算是比较简单直观的字符串匹配自动机,它其实就是在一颗Trie树上建一些失配指针,当失配时只要顺着失配指针走,就能避免一些重复的计算。比如对于字符串antibody和tide,如果第一个串匹配到第5个字符(b)失配了可以直接走入第二个串的第3个字符(d)进行匹配,因为前面的“ti”是公共的,如果能匹配到第一个串的第5个字符,那么前面两个肯定是ti。#include <bits/stdc原创 2017-07-11 09:43:41 · 192 阅读 · 0 评论 -
字符串最小表示法
复杂度O(n)O(n) 最小表示法及其证明#include <bits/stdc++.h>using namespace std;const int MAXN = 1E6;char s[MAXN];int minstr(const char s[], int len, int op = 0)//op=0 := 最小表示, op=1 := 最大表示{ int i=0, j=1, k原创 2017-07-10 16:22:31 · 290 阅读 · 0 评论 -
二分和三分总结与误区分析
今天学一个新算法的时候, 突然发现我以前的二分一直有点问题, 虽然以前的写的二分都能AC, 但还是有些问题, 如果题目给出的区间内没有解, 我的二分可能就会出问题. 所以干脆把所有二分三分思路整理一下. 加上更久之前发现自己三分写法的问题, 感觉自己能有些题目能AC真是运气好整数二分二分的坑点主要在整数的二分, 如果没有写好会出现死循环的问题.二分的原理是利用区间内值有序的特点, 不断让可行区间减半原创 2017-10-08 16:34:39 · 723 阅读 · 0 评论 -
后缀数组和高度数组 模板及应用
后缀数组原理为了方便处理一些情况, 我们把空串也当做一个后缀, 所以长度为n的字符串有n+1个后缀. sa[i] 表示以S[sa[i]]开头的后缀是字符串所有后缀中字典序第i的. rank[i]表示以S[i]开头的字符串在字符串所有后缀中排第rank[i]位. 用倍增法计算后缀数组. 记rk[i, j]为子串S[i…i+2j2^j-1]在所有长度为2j2^j长度的子串中的字典序排名, 如果i原创 2017-10-07 20:02:29 · 343 阅读 · 0 评论 -
ST表模板
ST表效率比线段树高, 可以查询区间最值, 但不能实时更新mi[i][j]代表从i开始, 往后2^j个元素的最小值, 也就是区间[i, i+2^j-1]的最小值 预处理时利用mi[i][j-1] 和 mi[i+(1<<(j-1))][j-1]更新mi[i][j] 查询是也是通过两段相互重合的比要查询区间小一点的区间得到最小值 复杂度预处理O(nlogn)O(nlog^n), 查询O(logn)原创 2017-10-15 17:18:48 · 299 阅读 · 0 评论 -
树状数组模板
单点更新相比于线段树, 好写的多 下标从1开始, sum(k)返回区间[1, k]的值, update将位置p的值+x 复杂度都是O(logn)O(log^n)int bit[maxn], n;inline int lowbit(int x) { return x&(-x); }inline void init(int n) { memset(bit, 0, sizeof(int) * (n原创 2017-10-15 17:09:45 · 259 阅读 · 0 评论 -
Mosaic HDU - 4819 二维线段树 模板
题目链接:Mosaic HDU - 4819题目大意一个n*n的矩阵, 让你求其中一个矩形区域中的最大值和最小值, 并更新其中的一个位置的值思路二维线段树代码#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <set>#include <queue>#include <ve原创 2017-11-12 17:56:07 · 305 阅读 · 0 评论 -
BZOJ - 2038: 小Z的袜子(hose) 莫队算法 模板
题目链接: 2038: [2009国家集训队]小Z的袜子(hose)题目大意一个长度为n的序列, 每个点有一个颜色, 用col[i]表示, q次询问, 每次求出[L, R]区间中随机选两个点的颜色相同的概率对于[L, R], 设区间内各种颜色的数量为a,b,c⋅⋅⋅a, b, c \cdot \cdot \cdot, 则答案为:a(a−1)2+b(b−1)2+c(c−1)2⋅⋅⋅(R−L+1)(R−原创 2017-10-26 19:27:46 · 243 阅读 · 0 评论 -
上下界网络流
来自: https://blog.csdn.net/linkfqy/article/details/74779656无源汇上下界可行流构建虚拟源点SS,虚拟汇点TT 若i点原来 入>出,则SS向i连一条容量为其差值的边 若i点原来 出>入,则i向TT连一条容量为其差值的边 因为一条边最终流量等于 下界+新图对应流量,原来流量不平衡的点需要用虚拟源汇来补偿流量因为...原创 2018-09-15 18:19:38 · 235 阅读 · 0 评论