ACM比赛专用模板
文章平均质量分 76
Z_X_B_233
这个作者很懒,什么都没留下…
展开
-
Tarjan强连通分量模板
#include #include #include #include #include #define maxn 100100 #define maxm 500100 #define inf 0x3f3f3f3f using namespace std; struct Edge { int next,en; } ; Edge edge[maxm]; int head[ma原创 2017-09-27 20:46:59 · 380 阅读 · 0 评论 -
动态建线段树,hdu6183,参考杰少的博客
我的代码不知为什么t掉了,这个等杰少回来再去问问他 先把我t掉的代码放在这里,主要是学一下动态建树的思想 这个是非常省空间的 这题目主要思路就是对每个颜色建一颗线段树,保存其y1,y2,范围内的点到y轴的最小距离 #include #include #include #include #define inf 0x3f3f3f3f using namespace std; st转载 2017-09-02 18:09:05 · 506 阅读 · 0 评论 -
主席树静态查找区间第k小模板(并没有杰少详细)即讲解
#include #include #include #include #include #include #define maxn 400100 using namespace std; struct Data { int val,id; }; struct Tree { int l,r,sum; }; Data a[maxn]; Tree t[maxn*10原创 2017-08-29 14:55:00 · 361 阅读 · 0 评论 -
凸包的判定及将凸包中的点逆时针存在数组中
数据结构: struct Point { double x; double y; Point(double a = 0, double b = 0) : x(a), y(b) {} friend bool operator < (const Point &l, const Point &r) {//以y为第一优先级,x为第二优先级原创 2017-10-15 18:57:44 · 359 阅读 · 0 评论 -
再看区间dp
区间dp就是我知道区间长度为len-1的所有状态,然后我可以通过小于len的的状态转移到区间长度为len的状态 一般是在外层循环遍历len,内层循环遍历起点来做的 但是这次做了一个很特别的题目 题目描述: 在x轴上有n个客人叫外卖,每个顾客因为追的番更新进度不同,所以在等外买的时间里每秒增加的愤怒值不同。给出客人和餐厅的位置,以及客人每分钟增加的愤怒值,还有快递小哥的行走一原创 2017-10-17 15:27:56 · 327 阅读 · 0 评论 -
数位dp模板
数位dp其实就是记忆化dfs也没什么好说的 现在看一个题,让你求出所有l到r的圆数,圆数就是这个数字转化成2进制后0的个数比1的个数多 开始写错了,就是没注意前导0的问题 dfs一般要传4个参数,一个是第几位,一个是状态,一个是需不需要上界,一个是有没有前导0 #include #include #include #include #include using namespac原创 2017-10-24 15:28:30 · 378 阅读 · 0 评论 -
Lis模板
#include #include #include #define maxn 1000 using namespace std; int ans[maxn],a[maxn],len; int Search(int data){//我们要找到的是最小的那个>=mid的ans的位置 int l=0,r=len,mid; while(l<r) {原创 2017-10-24 14:19:30 · 412 阅读 · 0 评论 -
差分约束模板
差分约束一般是用来求最大值最小值问题的 那么就分为两个问题 求最小值,把所有不等式化为>=然后求最长路 求最大值,把所有不等式化为 如果碰到 然后就是单纯的图论题了 现在来看poj1716 Description An integer interval [a,b], a Write a program that: find原创 2017-10-24 12:55:52 · 374 阅读 · 0 评论 -
并查集算法回顾
并查集就是有关集合的合并和查找算法 对于每个集合来说我们都有一个标志 这个集合中的所有元素都指向这个标志 我们可以定义a的标志为Set【a】 我们就可以利用这些标志来进行集合的合并和查找 在最开始的时候要memset(Set,-1,sizeof(Set)); 至于为什么后面可以自己体会 现在介绍两个函数 int find_r(int p) { if (Set[p原创 2017-03-07 19:46:16 · 410 阅读 · 0 评论 -
莫队算法模板
codeforces 617E 题意:给你n个数,有m个询问,问[l,r]之间有多少对i和j满足a[i]^a[i+1]^...^a[j]=k; 这个题目就是我先求出前缀异或和 然后i到j的异或和就是a[j]^a[i-1] 假设我们已知st到en的答案(ans),然后我们开一个Map数组,Map[i]表示st到en中前缀异或和为i的个数,Map也是已知的 现在我们要加上一个点,st-1或者原创 2017-10-23 20:33:49 · 306 阅读 · 0 评论 -
线段树模板
#include #include #include #include #define maxn 1000 #define inf 1000000 using namespace std; class segtree { public: int val,addmark; }; segtree segt[maxn<<2]; int a[maxn]; void build(int原创 2017-10-22 12:54:39 · 274 阅读 · 0 评论 -
再看斜率优化打牌
emmmm,马上要比赛了,最近正在复习打牌 又看了遍斜率优化dp,感觉对他的理解上了一个新的高度呐 斜率优化dp可以优化掉一个n 一般来说,如果要求一个状态时要遍历前面已经求过的所有状态的话,就可以考虑使用斜率优化 再求第k个状态时对于前面的所有状态如果k2比k1更优就有 Y(k2)-Y(k1)X(k2)-X(k1)f(k) 我们就可以使用斜率优化 这里我们要保证原创 2017-10-10 20:26:41 · 336 阅读 · 0 评论 -
KMP模板
本来想直接copy匡斌的模板来着的 但是匡斌的模板会RE,next的原因,现在就稍微改了改拿过来了 #include #include using namespace std; const int N = 1000002; int Next[N]; char S[N], T[N]; int slen, tlen; void getNext() { int j, k; j原创 2017-10-02 09:47:35 · 327 阅读 · 0 评论 -
最小费用最大流模板
#include using namespace std; #define INF 0x3f3f3f3f typedef long long LL; const int M=2010;//边数注意啦,我们这东西是有逆向边的,所以边数要×2哦 const int N=510;//点数 struct edge { int to; int next; int cap;原创 2017-09-30 20:37:15 · 202 阅读 · 0 评论 -
单纯最大流(两个给定节点的最小割)问题的最优解法
运用了各种不明所以的优化 反正我们会板子就行啦 然后再说几点最大流的用处 点i和点j的最大流其实是等于把点i和点j分开的最小割的 你想啊,从i到j有那么多流量对吧 如果我想要让i一滴水都留不到j 那么我至少要割掉最大流那么多的流量吧,具体证明。。。。我忘了,反正我等弱鸡队伍用个板子就行 还有一个用处是在忘了那一场的网络赛上看到的 就是求两个点的最小割的最小要割的边的原创 2017-09-20 18:50:30 · 456 阅读 · 0 评论 -
数位dp 求l-r(10进制) 在k进制中有多少个回文数的模板
#include #include #include #include using namespace std; #define LL long long LL l, r; int a[66]; LL dp[66][66][40]; LL dfs(int len, int l, int r, bool lim, bool ok,int k)//ok表示是回文串,k表示k进制 {原创 2017-08-20 14:43:01 · 1095 阅读 · 0 评论