
A -- 模板
Object_S
Java C++
展开
-
T103492 【模板】点双连通分量
题目地址#include<cstdio>#include<iostream>using namespace std;const int MAXN=1e5,MAXM=1e6;struct Edge{ int from,to,nxt;}e[MAXM];int head[MAXN],edgeCnt=1;void addEdge(int u,int v){...原创 2019-10-13 17:32:18 · 392 阅读 · 0 评论 -
T103489 【模板】边双连通分量
题目地址易错点:设桥时需要考虑双向边. dfs时需要设置当前点的dcc.#include<cstdio>#include<iostream>using namespace std;const int MAXN=1e5,MAXM=1e6;struct Edge{ int from,to,nxt;}e[MAXM];int head[MAXN...原创 2019-10-13 17:02:42 · 313 阅读 · 0 评论 -
T103440 【模板】缩点
题目地址易错点:出栈时应将inStck[y]置空.#include<cstdio>#include<iostream>using namespace std;const int MAXN=1e5,MAXM=1e6;struct Edge{ int from,to,nxt;}e[MAXM];int head[MAXN],edgeCnt=1;vo...原创 2019-10-13 14:48:23 · 2463 阅读 · 0 评论 -
P3388 【模板】割点(割顶)
题目地址注意点:dfn[x]<=low[nowV].#include<cstdio>#include<iostream>using namespace std;const int MAXN=4e4,MAXM=2e5;struct Edge{ int from,to,nxt;}e[MAXM];int head[MAXN],edgeCnt=1...原创 2019-10-13 09:24:19 · 174 阅读 · 0 评论 -
AW353 雨天的尾巴 (线段树合并)
题目地址易错点:merge()时如果val==0应当把pos也设为0,这样就可以保证没有救济粮的情况下输出值为0. 每次insert后val和pos一定都要更新. 由于要求编号尽量小,pos更新时若tr[tr[p].ls].val>=tr[tr[p].rs].val则tr[p].pos=tr[tr[p].ls].pos. dfs合并每个点的线段树时,一定要注意更新root[...原创 2019-09-29 12:52:30 · 166 阅读 · 0 评论 -
AW252 树(点分治)
题目地址注意点:枚举阶段时需要用dfs预处理每个点的深度.#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int MAXN=2e4,MAXM=3e4;struct Edge{ i...原创 2019-09-25 20:56:44 · 176 阅读 · 0 评论 -
AW250 磁力块(分块)
题目地址易错点:和要用long long存储. 读入的吸引半径需要乘方(因为通过(x-x0)*(x-x0)-(y-y0)*(y-y0)获取的值本身就是乘方的). (分块)右端点需要用min(n,i+w-1)获取.#include<cstdio>#include<iostream>#include<algorithm>#include&l...原创 2019-09-25 00:33:24 · 609 阅读 · 0 评论 -
关于树状数组的几点总结
本文不一定适合初学者零、树状数组的基本概念1.概念:树状数组是一种支持对数列进行快速的区间操作(如:区间编号为1~10的值统一增加某个数)的数据结构。2.实现原理:二进制加法 位运算 补码和原码 (第一个决定了这个数据结构的理论有效性,第二和第三个决定了具体实现)3.特性:如果观察树状数组的结构,可以发现:树状数组的结构就像是一个去掉右结点的线段树的结构.(这决定...原创 2018-11-25 22:06:04 · 1071 阅读 · 0 评论 -
AW278 数字组合(0/1背包)
题目地址状态设计:f[i]:和为i时的总选择方案数.易错点:初始值f[0]应设为1. 第二层循环(背包体积)时的循环条件应设为j>=a[i].#include<cstdio>#include<iostream>using namespace std;const int MAXN=1e3;int a[MAXN],f[MAXN];int ...原创 2019-09-22 12:59:31 · 192 阅读 · 0 评论 -
AW279 自然数拆分(完全背包)
题目地址状态设计:f[n]:自然数n的拆分方案数. f[x]=f[x]+f[x-k](x>=k).初始值:f[0]=1.易错点:如果第一层循环是从1循环到n,就会发现f[n]+=f[0],即多加了一个1.#include<cstdio>#include<iostream>#include<cstring>#define ...原创 2019-09-22 12:47:22 · 248 阅读 · 0 评论 -
P1880 [NOI1995]石子合并(四边形不等式优化DP)
题目地址状态设计:fmax[i][j]:从第i堆合并到第j堆的最大得分. fmin[i][j]:从第i堆合并到第j堆的最小得分. s[i][j]:fmin[i][j]被更新时所使用的中间点k.易错点:由于有环,所以需要断链加一倍. fmax[i][j]不具有单调性,不能使用四边形不等式优化. 枚举第一维时,由于需要用到i和i+1,需要倒序循环.(即从2*n-1到1)#...原创 2019-09-21 22:31:52 · 185 阅读 · 1 评论 -
AW247 亚特兰蒂斯(区间覆盖线段树)
题目地址注意点:需要将y轴坐标离散化后映射到线段树上.#include<cstdio>#include<iostream>#include<algorithm>#include<map>using namespace std;const int MAXN=2e5;struct Point{ double x,y,z; ...原创 2019-09-26 21:19:07 · 227 阅读 · 0 评论 -
AW256 最大异或和(可持久化0/1trie树)
题目地址注意点:思想可以类比主席树.#include<cstdio>#include<iostream>using namespace std;const int MAXN=1e6,MAXINDEX=MAXN*24;int trie[MAXINDEX][2],trieCnt=0,latest[MAXINDEX];int s[MAXN],root[M...原创 2019-09-27 12:32:49 · 552 阅读 · 0 评论 -
AW245 你能回答这些问题吗(连续子段和线段树)
题目地址易错点:建树递归到叶节点后,初始化时要注意不要漏掉某个元素. 查询时要注意不要用反元素名称(rx -> lx). 查询时a和b只需要reset a和b(ans不需要).#include<cstdio>#include<iostream>using namespace std;const int MAXN=1e6,MAXM=2e5,IN...原创 2019-09-28 21:18:40 · 155 阅读 · 0 评论 -
P3383 【模板】线性筛素数 (试除法)
题目地址注意点:0和1都不是素数,所以在判断时要特判<=1的数字.#include<cstdio>#include<iostream>#include<cmath>using namespace std;bool isPrime(int x){ if(x<=1)return 0; for(int i=2;i<=sqr...原创 2019-09-30 15:37:30 · 129 阅读 · 0 评论 -
P3383 【模板】线性筛素数 (埃氏筛法)
题目地址#include<cstdio>#include<iostream>#include<cmath>#include<cstring>using namespace std;const int MAXN=20000000;bool isPrime[MAXN],notPrime[MAXN];void initPrime(i...原创 2019-09-30 23:01:58 · 230 阅读 · 0 评论 -
AW201 可见的点 (欧拉函数)
题目地址易错点:初始化时可以直接忽略1的欧拉函数,以便于前缀和统计.#include<cstdio>#include<iostream>using namespace std;const int MAXN=2e3;int phi[MAXN],sum[MAXN];void eular(int x){ for(int i=2;i<=x;i...原创 2019-10-03 20:08:41 · 243 阅读 · 0 评论 -
P3834 【模板】可持久化线段树 1 (主席树)
题目地址易错点:查询时若k>lsum则下一步应当query(tr[p].rs,tr[q].rs,mid+1,r,k-lsum);这是由可持久化结构的迭代性得出的.#include<cstdio>#include<iostream>using namespace std;const int MAXN=1e7,INF=2e9;struct Node...原创 2019-10-05 01:57:36 · 145 阅读 · 0 评论 -
AW301 任务安排2 (斜率优化DP)
题目地址易错点:单调队列一定要分清序号和具体值(例如:q[l]和l). 注意中括号嵌套时的逻辑正确性. 要保证斜率单调递增,因此可以直接使用单调队列进行问题求解.#include<cstdio>#include<iostream>#include<cstring>#define ll long longusing namespace ...原创 2019-08-12 23:03:22 · 140 阅读 · 0 评论 -
AW296 清理班次2(数据结构优化DP)
题目地址状态设计:f[当前班次].(当前最小总佣金)易错点:线段树如果不动态开点的话数组可以开到4倍. 如果两个结构体功能类似可以考虑直接合并. 状态更新时,在获取到之间的最小值后还应当增加w[i](所索取的报酬).#include<cstdio>#include<iostream>#include<cstring>#includ...原创 2019-09-20 23:15:48 · 175 阅读 · 0 评论 -
AW306 杰拉尔德和巨型象棋(计数DP)
题目地址易错点:输出时需要用(f[n+1]+mod)%mod.(防止负数) f[i]转移时需要开long long.#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#define ll long longusing namespac...原创 2019-09-20 21:18:48 · 148 阅读 · 0 评论 -
P4313 【模板】最小割多选一模型
题目地址易错点: #include<bits/stdc++.h>using namespace std;const int MAXN=105*105*3;const int INF=2e9;struct Edge{ int from,to,w,nxt;}e[MAXN*10];int head[MAXN],edgeCnt=1;void addE...原创 2019-07-16 17:20:20 · 159 阅读 · 0 评论 -
P4174 【模板】最大权闭合子图
前置知识:相对大小的圆舞曲 —— 最小割多选一模型题目地址基本思路:最大权闭合子图的权值和等于总正权值减去最大流,即. 建图方法是S连正权值点(边权为点权),负权值点连T(边权为点权的绝对值),正负权值点相互连接(边权为INF). 证明见《最小割模型在信息学竞赛中的应用》第19页.易错点:不写余量优化的网络流等同于竭泽而渔.#include<cstdio&g...原创 2019-07-15 20:48:58 · 172 阅读 · 0 评论 -
P3384 【模板】树链剖分
题目地址注意点:根节点的深度需要提前设置,否则会死循环.#include<cstdio>#include<iostream>using namespace std;const int MAXN=1000010,MAXM=1000010;struct Node{ int ls,rs,lazy; long long sum;}tr[MAXN];i...原创 2019-07-11 12:13:05 · 138 阅读 · 0 评论 -
P3386 【模板】二分图匹配
题目描述给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数题目地址匈牙利算法本质上是对于每个点进行dfs,并在递归的同时不断找出新的增广路. 注意点:需要使用vis数组并在每次dfs前清空,防止死循环. 模板里不需要加双向边. vis并不是增广成功才能设置,失败不设置一定会爆栈的. 在dfs的过程中累加ans会导致增广路全部被计入.Dinic算法和其...原创 2019-07-10 21:56:52 · 157 阅读 · 0 评论 -
历史的进程——单调队列
基本概念单调队列是一种能保证队列内元素单调性的队列。 与优先队列的不同之处在于,单调队列保持了元素的下标连续性。 复杂度O(n)具体过程单调队列在每增加一个元素之前,都先将队列头部大于/小于(具体取决于单调队列的单调性)将要增加的元素的所有元素清除掉,再增加要增加的元素。 由于对于每一个增加的元素都进行了以上操作,每增加完一个元素单调队列内部都保持了单调性。 在保持单调队列的基本...原创 2019-07-05 13:04:15 · 137 阅读 · 0 评论 -
CH1601 【模板】前缀统计
题目地址注意点:直接将ed[]数组作为字符串存在数量的计数数组即可.#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int SIZE=1000010;int trie[SIZE][26],ed[SIZE],tot=1;void i...原创 2019-07-14 08:47:51 · 187 阅读 · 0 评论 -
P1144 最短路计数
题目地址基本思想:对于任意点,从源点到这个点的最短路径数量可以由直接到达这个点并更新这个点dis的点的最短路径直接推出。通过归纳法可知,当dis相同时直接累加最短路径方案数,dis小于时直接继承上一点的方案数即可.易错点:不能把=打成-. 重载<运算符时需要相反. 使用dijkstra之前需要初始化dis[]数组. 使用dijkstra之前需要初始化dis[s]为0....原创 2019-07-13 13:08:13 · 209 阅读 · 0 评论 -
P4779 【模板】单源最短路径
题目地址注意点:源点需要设置初始距离(0). 优先队列默认是从大到小排序,因此需要重载运算符.#include<cstdio>#include<iostream>#include<queue>using namespace std;const int MAXN=1000010,MAXM=1000010;struct Edge{ in...原创 2019-07-13 12:37:08 · 142 阅读 · 0 评论 -
快速幂
前置知识用二进制表示数字的方法(需要熟练理解)基本思想快速幂的基本思想就是将运算进行"降幂",再利用二进制数字合并的原理减少运算次数。例如,计算a^b则需要不停计算a*a;同理,计算a*b则需要不停计算a+a。例题1.求 a 的 b 次方对 p 取模的值,其中 1≤a,b,p≤10^9。(题目链接)#include<cstdio>#include<...原创 2019-07-03 12:17:26 · 111 阅读 · 0 评论 -
相对大小的圆舞曲 —— 最小割多选一模型
例题模板地址基本思路首先,肯定是要对于每个同学进行文科与理科满意值的比对,并取较大的满意值。 接下来要考虑的是每个同学的same_art[i][j]与same_science[i][j]值。 可以想到,既然在不考虑周围同学的情况下可以利用网络流的性质进行每个独立同学的文科最大流与理科最大流进行比对,并取较大的满意值,那么完全可以把每个同学和这个同学周围的四个同学当成"绑在一条绳...原创 2019-07-16 21:09:00 · 173 阅读 · 0 评论 -
HDU2255 【模板】KM算法
题目地址KM算法易错点:配不上的话可能连机会都没有了,所以不要太天真(vb[y]=1(占有)要在配得上(gap==0,门当户对)的前提下). 没缘分的话最好就不要妄想(if(vb[y])continue;).费用流算法(qwq)#include<cstdio>#include<iostream>#include<cstring>...原创 2019-07-24 00:10:34 · 391 阅读 · 0 评论 -
AW294 计算重复(倍增优化DP)
题目地址状态设计:f[字符串s1的开始位置][s2首尾相接的次数(2^j)](至少需要的字符数量).易错点:预处理f[i][0](以s1[i]为开头形成s2所需要的最小字符数量)时直接枚举即可.#include<cstdio>#include<iostream>#include<cstring>#define ll long lon...原创 2019-09-19 23:06:11 · 164 阅读 · 0 评论 -
AW297 赤壁之战(数据结构优化DP)
题目地址状态设计:f[子序列长度][当前位数](严格递增子序列数量).易错点:初始化时需要设置f[0][0]=1. 每个独立的数字都只会影响到比它更大的数字. 预处理时的sort保证了整个算法的正确性.#include<cstdio>#include<iostream>#include<cstring>#include<al...原创 2019-09-19 12:54:02 · 203 阅读 · 0 评论 -
AW348 沙漠之王(0/1分数规划-Dinkelbach)
题目地址易错点:double类型不初始化为0就爆炸. 每次prim前需要先从首都向每个村庄加边. "长度"指二维欧氏距离.#include<cstdio>#include<iostream>#include<cstring>#include<cmath>using namespace std;const int MAXN...原创 2019-08-22 11:00:52 · 229 阅读 · 0 评论 -
P3366 【模板】最小生成树-Prim
算法原理:在kruskal算法正确性的基础上,考虑进行优化. 由于kruskal的复杂度为O(mlogm),在稠密图中表现可能不太好,思考能否利用最短这一性质对复杂度上界进行优化. 联想到dijkstra的性质,可以发现最小生成树在局部也满足这一性质(最小生成树的每一个子树都是一个最小生成树). 由于任意一点都必然会在最小生成树中,可以从任意一点开始"探索"(类似文明VI中探索地图)....原创 2019-08-21 07:19:01 · 415 阅读 · 0 评论 -
P3385 【模板】负环
题目地址易错点:由于是普通队列,不需要判断Node的大小关系,所以可以记录当前点是否在队列中(vis[]),如果在则不需要重复入队. 判断队列前端和后端哪个dis更小,让更小的在前面(swap(q.front(),q.back()))是一个有效剪枝. 数据清空时邻接表(head[])必须清空,但边只需要重置edgeCnt即可.#include<cstdio>#in...原创 2019-08-24 08:19:15 · 112 阅读 · 0 评论 -
AW302 任务安排3
题目地址易错点:需要熟练掌握斜率优化DP的原理与实现方法. 二分时需要仔细判定边界条件.#include<cstdio>#include<iostream>#define ll long longusing namespace std;const int MAXN=3e5+10;ll f[MAXN],sumT[MAXN],sumC[MAXN];...原创 2019-08-13 21:59:05 · 247 阅读 · 0 评论 -
AW379 【模板】DAG最小路径点覆盖
题目地址易错点:需要理解DAG最小路径覆盖的实质.#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int MAXN=210;bool e[MAXN][MAXN],vis[MAXN];int match[MAXN],n;bool ...原创 2019-07-27 22:54:46 · 198 阅读 · 0 评论 -
P3383 【模板】埃氏筛法
题目地址易错点:#include<cstdio>#include<iostream>#include<cmath>using namespace std;const int MAXN=10000010;bool vis[MAXN];void primes(int x){ for(int i=1;i<=sqrt(x);i++){...原创 2019-07-30 02:48:37 · 138 阅读 · 0 评论