
模板_总结
文章平均质量分 75
stormjing7
这个作者很懒,什么都没留下…
展开
-
Tarjian求无向图点双连通分量、边双连通分量
无向图求点双连通分量、边双连通分量首先要知道什么是点双、边双:点双:任意两点至少存在两条 ”点不重复“ 的路径。(内部无割点)边双:每条边至少在一个简单环里。(所有边都不是桥)举个例子:下面图中点双分量有两个{1,2,3}、{3,4,5},但是只有一个边双分量{1, 2, 3,4 ,5}。求点双分量代码跟求割点类似,不过要加一个栈保存经过的边,每次遇到割点就将当前栈里面输出,即为一个...原创 2019-10-05 19:40:08 · 420 阅读 · 1 评论 -
字符串哈希
//hash一般用来解决字符串判重/字符串匹配问题//遇见不定长问题可通过二分+hash降低复杂度//遇见定长字符串问题可通过尺取+hash来降低复杂度//二维hash的时候尺取方法就是把之前不需要的都变为0再加上当前行,将匹配字符串整体下移,来验证hash值是否相等//---------------------------------单Hash----------------------...原创 2019-06-21 17:20:31 · 844 阅读 · 0 评论 -
POJ - 3468 A Simple Problem with Integers(区间修改,区间查询,模板题)
POJ - 3468 A Simple Problem with Integers题目线段树裸题分析模板,注意下注释部分,累加变量要用long long#include <cstdio>#include <iostream>#include <cstring>#include <cmath>#include <algorith...原创 2019-06-11 20:51:53 · 201 阅读 · 0 评论 -
2019 ICPC 南昌邀请赛 B-Polynomial(拉格朗日插值法0~n)
暂时没有补题链接,等重现赛题目定义了f(x)=a0+a1x1+a2x2+⋯+anxnf_{(x)}=a_{0}+a_{1} x^{1}+a_{2} x^{2}+\cdots+a_{n} x^{n}f(x)=a0+a1x1+a2x2+⋯+anxn,数字可能会非常大,所以对9999991取模。对于一个多项式,XH不知道任意一个 aia_iai,但是他知道f(0),f(1),f(2)⋯f...原创 2019-06-08 22:38:29 · 827 阅读 · 0 评论 -
HDU - 3308 LCIS(单点更新,区间合并,查询)
HDU - 3308 LCIS题目给你长度为 n 的序列,两种操作,1、更新某个点的值,2、查询某个区间里最长连续上升子序列长度。操作一共 m 次。(n,m<1e5n, m < 1e5n,m<1e5)分析经典的线段树区间合并题目首先要维护区间的三个值区间最长连续上升子序列长度区间以左端点开始的最长连续上升子序列的长度区间以右端点结束的最长连续上升...原创 2019-06-12 16:30:11 · 240 阅读 · 0 评论 -
拉格朗日插值法总结模板(1~n)
拉格朗日插值法简介在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·路易斯·拉格朗日命名的一种多项式插值方法。许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。如对实践中的某个物理量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值。这样的多项式称为拉格朗日(插值)多项式。推导假...原创 2019-06-05 22:20:01 · 1453 阅读 · 0 评论 -
POJ 1330 Nearest Common Ancestors (LCA模板题)
题目最裸的LCA模板题分析可以做的方式很多离线 Tarjian算法在线 LCA倍增法在线 dfs + ST表算法下面给出①:Tarjian + 邻接表,(POJ不支持万能头文件,和c++11,所以下面代码要修改才能提交)#include <bits/stdc++.h>#pragma GCC diagnostic error "-std=c++11"#defi...原创 2019-05-17 11:04:17 · 235 阅读 · 0 评论 -
51nod-1021 石子归并(区间dp入门)
题目给出n堆石子,两堆相邻的可以合并,花费为合并后的石子数。求最终合并成一堆要花费最小代价。分析区间dp,顾名思义,就是解决一些区间内最优值的问题,通常的时间复杂度为n^2 或者 n^3而区间dp的大致思路就是首先确定状态初始化dp数组的值,然后枚举区间长度,枚举区间的起始点,(有的题目还需要枚举断点) 由小区间转移到大区间。最后dp[1][n]往往就是答案。这个题,s代表区间始点,...原创 2019-05-22 11:34:25 · 295 阅读 · 0 评论 -
51nod1042 数字0-9的数量(数位dp or 模拟)
1042 数字0-9的数量题目分析两种做法,数位dp,这种比较好理解还有迭代模拟其实两种思想都一样,想好三点,(例 2048)当前数字 e 是 204 时:当前数字个位对个位影响204 % 10 = 4【0,4】加上 s当前数字高位对个位影响204 / 10 = 20【0, 9】加上20 * s当前数字个位对高位影响【2】加上 s * (4 + 1)【0】加...原创 2019-05-25 21:50:10 · 294 阅读 · 0 评论 -
计算几何之线段相交(51nod1264)
解法一:设两线段端点P(p1, p2), Q(q1, q2),分两步确定两线段是否相交快速排斥实验设以线段 P1P2 为对角线的矩形为 R,设以线段 Q1Q2 为对角线的矩形为 T,若 R、T 不相交,则两线段不可能相交假设 P1 = (x1, y1), P2 = (x2, y2), Q1 = (x3, y3), Q2 = (x4, y4),设矩形 R 的 x 坐标的最小边界为 min...原创 2019-05-07 22:25:03 · 362 阅读 · 0 评论 -
1240 莫比乌斯函数(单值求解)
题目要求给出一个数n,求莫比乌斯函数值miu(n)。分析因为题目给出单个值,直接求miu函数即可。#include <bits/stdc++.h>#pragma GCC diagnostic error "-std=c++11"#define d(x) cout << (x) << endl#define INF 0x3f3f3f3f#defin...原创 2019-05-10 12:00:40 · 598 阅读 · 0 评论 -
51nod 1298圆与三角形(判断线段与圆相交)
题目给三角形三个点,圆心,半径,问三角形圆是否相交?分析三点在圆内,不相交三点在圆外,要考虑判断剩下的情况都相交三点在圆外时,只需判断三条线段是否与圆相交,若有一条相交,输出Yes转化为线段与圆相交,在端点都在圆外情况下。先用判断圆心到线段所在直线距离,只能小于半径。然后用判断圆心与两端点角度是否为锐角。代码#include <bits/stdc++.h>...原创 2019-05-09 21:14:52 · 335 阅读 · 0 评论 -
hihocoder#1093-最短路径(SPFA算法)
SPFA算法,即Shortest Path Faster Algorithm。首先假设用 bfsbfsbfs解决最短路径构造一个队列,最开始队列里只有(S, 0)——表示当前处于点S,从点S到达该点的距离为0,然后每次从队首取出一个节点(i, L)——表示当前处于点i,从点S到达该点的距离为L,接下来遍历所有从这个节点出发的边(i, j, l)——表示i和j之间有一条长度为l的边,将(j, L...原创 2019-06-17 20:26:30 · 288 阅读 · 0 评论 -
51nod 2599 最近公共祖先(LCA) (ST表求LCA模板)
51nod 2599 最近公共祖先(LCA)题目裸 LCA,给一颗 n 个节点, n-1 条边的树,m次查询求任意两点LCA。算法介绍求 LCALCALCA 可以用离线 TarjianTarjianTarjian算法,算法复杂度O(n + m)。还有一种离线的算法,预处理O(nlogn),在线查询O(1)。就是用STSTST表求LCA。首先介绍欧拉遍历序,给一颗树,从根节点遍历:欧...原创 2019-06-26 16:25:11 · 719 阅读 · 0 评论 -
线性基总结模板
线性基看了好多博客,,,,线性基是一组数,是一个集合的产物,一般用来求原集合子集异或和极值的问题。有什么作用?通过线性基中元素xor出的数的值域与原来的数xor出数的值域相同。但同时它这组数的大小只有原集合最大数的二进制位那麽多 (60 多位),线性基与原集合关于异或作用一样,但是他是最简的,好像线性代数里面叫做 基。构造求线性基时将一个数的二进制位看成一个向量。假定原集合为 ...原创 2019-07-13 17:45:42 · 193 阅读 · 0 评论 -
Tarjian求无向图割点模板 UVA - 315 Network
UVA - 315 Network题目给一个无向图,不过输入有点麻烦。求所有割点分析Tarjian 求无向图割点模板题。注意不联通情况。代码#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector&...原创 2019-07-28 19:19:04 · 246 阅读 · 0 评论 -
Tarjian求无向图桥模板 UVA-796 Critical Links
UVA-796 Critical Links题目给一个无向图,求所有桥,按第一个顶点升序输出。分析Tarjian 求桥模板,这里用 vector 存图, 注意判重。当 v 及 v 的孩子节点能到达最早的祖先都没有 u 高。(u,v)是桥代码#include <cstdio>#include <cstring>#include <iostream&g...原创 2019-07-29 14:32:34 · 199 阅读 · 0 评论 -
网络流总结
网络流总结看了下刘汝佳的紫书, 白书。首先是最大流。怎么找最大流,利用增广路定理增广路定理对于当前流求出残量网络,如果残量网络有源点到汇点的通路,也即是增光路,那么流量就可以增大。它的逆命题就是增广路定理——如果当前残量网络不存在增广路,则当前流就是最大流。下面是 Edmonds-Karp 算法(看了之后才知道做题不用这个……)代码中的样例:#include<bits/st...原创 2019-10-02 22:06:13 · 212 阅读 · 0 评论 -
求1~n中与m互质的数的个数(容斥原理)
求1~n中与m互质的数的个数先说方法。利用容斥原理,先求不互质的个数 ansansans,最后结果 n−ansn-ansn−ans。先将 mmm分解质因子。存到 ppp 数组里。假如 mmm 有 2,3,5,质因子,那么2, 3, 5倍数不互质,但是会有重复。用容斥原理算出正确的即可。k / 2 + k / 3 + k / 5 - k / (2 * 3) - k / (3 * 5) -...原创 2019-08-16 17:01:25 · 3914 阅读 · 0 评论 -
回文自动机 PAM
回文自动机 PAM 总结。例题 ACM-ICPC 2018 南京赛区网络预赛 I. Skr原创 2019-08-13 22:28:01 · 270 阅读 · 0 评论 -
欧拉筛应用 J. Sum(DP思维)
ACM-ICPC 2018 南京赛区网络预赛 J. Sum欧拉筛欧拉筛可以在线性的时间内筛素数。原理是每一个合数都被它的最小质因子筛去。不会多筛,也不会漏筛。代码中一般有两个数组,标记是否是素数的数组 vis[]vis[]vis[]保存素数的数组 prime[]prime[]prime[]int vis[N], prime[N];int cnt;void isprime(){ ...原创 2019-08-01 21:34:02 · 231 阅读 · 0 评论 -
A* 求 第 k 短路
ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven第 k 短路想一下 BFS 遍历图,如果没有 vis 数组的限制,也就是说找到终点之后继续 BFS 下去,那么终点第 k 次入队,就是第 k 短路。但是如果直接BFS搜索下去,时间复杂度会非常高,因此我们需要剪枝,怎么剪枝呢?A* 算法就可很好的剪枝,首先 A* 时基于 BFS,只不过对于队列来说有了一个优先级...原创 2019-08-08 10:33:41 · 240 阅读 · 0 评论 -
有向图的强连通分量(Tarjian)
强连通分量有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,...原创 2019-07-27 15:20:03 · 3784 阅读 · 0 评论 -
二分模板
二分二分模板1.循环必须是l < r2.if判断条件看是不是不满足条件, 然后修改上下界3.若if else后是r = mid - 1,则前面mid 语句要加14.出循环一定是l == r,所以l和r用哪个都可以二分只有下面两种情况1:找大于等于给定数的第一个位置 (满足某个条件的第一个数)2:找小于等于给定数的最后一个数 (满足某个条件的最后一个数)// 判断条...原创 2019-07-22 20:51:58 · 305 阅读 · 0 评论 -
无向图的割点和桥
定义桥:是存在于无向图中的这样的一条边,如果去掉这一条边,那么整张无向图会分为两部分,这样的一条边称为桥无向连通图中,如果删除某边后,图变成不连通,则称该边为桥。割点:无向连通图中,如果删除某点后,图变成不连通,则称该点为割点。在代码 dfsdfsdfs 过程中,加入“时间戳”, dfs−clockdfs-clockdfs−clock,记录到达每个点的时间pre[u] = ++dfs...原创 2019-07-26 11:36:16 · 1227 阅读 · 0 评论 -
二分图染色(DFS框架)
DFS框架vector<int> G[maxn] // 图int vis[maxn] // 访问节点标志void dfs(int u) { vis[i] = 1; previsit(u); // 访问节点 u 之前的操作 int d = G[u].size(); for(int i = 0; i < d; i++) { // ...原创 2019-07-25 22:27:57 · 480 阅读 · 0 评论 -
线段树写法总结
线段树N是题目给的最大区间,而节点数要开 4 倍,确切的来说节点数要开大于 maxn 的2^x的两倍lson 和 rson 分辨表示结点的左儿子和右儿子,由于每次传参数的时候都固定是这几个变量,所以可以用预定于比较方便的表示以前的写法是另外开两个个数组记录每个结点所表示的区间,其实这个区间不必保存,一边算一边传下去就行,只需要写函数的时候多两个参数,结合 lson 和 rson 的预定义可...原创 2019-05-19 14:59:12 · 549 阅读 · 0 评论 -
计算几何模板
//// main.cpp#include <iostream>#include <cmath>/* * Liuctic 的计算几何库 * p-Lpoint ln,l - Lline ls - Llineseglr - Lrad * 求平面上两点之间的距离 p2pdis * 返回(P1-P0)*(P2-P0)的叉积 ...原创 2019-05-08 21:23:01 · 250 阅读 · 0 评论 -
素数判定
一、如果求某一范围所有素数,或者所判定素数较小,数组可以开下,就可以用筛选法线性筛#include <bits/stdc++.h>#define INF 0x3f3f3f3f#define d(x) cout << (x) << endl#pragma GCC diagnostic error "-std=c++11"using namespace ...原创 2019-04-23 22:24:33 · 1660 阅读 · 0 评论 -
并查集
原文地址:https://blog.youkuaiyun.com/niushuai666/article/details/6662911例子就是杭电上的畅通工程:http://acm.hdu.edu.cn/showproblem.php?pid=1232首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个...转载 2018-11-28 19:17:34 · 196 阅读 · 0 评论 -
最短路径(Dijkstra,Floyd)
1. Dijkstra算法代码(有限队列+邻接表优化)HDU-2544#include &lt;bits/stdc++.h&gt;using namespace std;typedef long long ll;const int N = 106;const int INF = 0x3f3f3f3f;typedef pair&lt;int, int&gt; p;vector&lt...原创 2018-11-26 19:44:48 · 217 阅读 · 0 评论 -
最小生成树(Prim,Kruskal)
1. 图的基本概念:连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图。强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连通图。连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。生成树:一个连通图的生成树是指一个连通子图,它含有图中全部n个...原创 2018-11-16 22:44:40 · 350 阅读 · 0 评论 -
C++STL用法总结(updating)
一, 什么是STL?STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。二, STL常用容器。1. queuequeue就是队列,是一种先进先出的容器(First In First Out,简称FIFO),引用需要头文件:#include &amp;amp;amp;lt; ...原创 2018-11-15 21:18:05 · 265 阅读 · 0 评论 -
JAVA大数加法
1005 大数加法基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注给出2个大整数A,B,计算A+B的结果。Input第1行:大数A第2行:大数B(A,B的长度 &amp;lt;= 10000 需注意:A B有可能为负数)Output输出A + BInput示例68932147586468711654886Output示例53764380...原创 2018-10-15 20:52:22 · 425 阅读 · 0 评论 -
KMP,Manacher算法
1.kmp算法首先是kmp算法,kmp是一种字符串匹配算法,假设有一个文本串S,和一个模式串P,现在要查找P在S中的位置,这时就可以用到kmp算法,他的大致思想就是利用模式串P本身的一些性质,来大大降低时间复杂度(O(n+m))。其中最重要的就是next数组。next数组本质就是求当前位置之前的串中最长公共前后缀中前缀的最后一个字符所占的位置。其中next数组本身也可以解决一些其他的问题。...原创 2019-08-17 09:40:02 · 281 阅读 · 0 评论 -
数据离散化技巧
数据离散化,就是当我们只在乎题目所给的数据之间的大小关系,而忽略每一个数据的大小属性时,将数据离散化为较小较为容易处理的数据,而不影响最后结果。举个例子,题目给出一组数据5,4,4,2,8,你只关心他们之间的大小关系,此时就可以将数据离散化为3,2,2,1,4,你会发现每个数据之间的大小关系并没有变化,而数据大小范围缩小了很多。伪代码如下:struct node{ int x; ...原创 2018-09-27 20:27:05 · 787 阅读 · 0 评论 -
博弈论总结
转载来源:http://www.wutianqi.com/?p=1081博弈知识汇总以下是我从网上收集的关于组合博弈的资料汇总:有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(...转载 2018-08-17 17:45:05 · 248 阅读 · 0 评论 -
树状数组求逆序对
题目大意:假定给你一段数字序列,数字大小从0 - n-1, 求其中满足(a[i]>a[j]&&i<j)的逆序对的数量分析:利用树状数组维护一个前缀和数组,对于每个元素,将其所在位置加一,c[i]既是在i之前比a[i]小的数的数量。代码:#include <bits/stdc++.h>using namespace std;typedef l...原创 2018-08-17 16:37:40 · 213 阅读 · 0 评论 -
c++读入优化(整数)
原文链接:https://blog.youkuaiyun.com/c20182030/article/details/69525919一、背景 这是某道题目的状态:我的代码:大牛的代码: 我瞬间萌币了!我有这么慢?Are you kidding me? 点进去一看: void Read(int & p) { p=...转载 2018-07-30 20:21:16 · 1278 阅读 · 0 评论 -
二维树状数组
转载出处:https://blog.youkuaiyun.com/cggwz/article/details/78420102标注红字为精髓我在前面已经介绍过了树状数组的各种操作,但是你会轻易的发现前面我们介绍的树状数组都是一维的,那既然一维可以,那么会不会有二维的树状数组呢?答案是肯定的。那么我今天就来教大家如何实现二维的树状数组。今天我介绍基本的功能:对二维数组内某一点加上一个值 求一...转载 2018-07-22 20:22:25 · 278 阅读 · 0 评论