
模板
algzjh
这个作者很懒,什么都没留下…
展开
-
Dijkstra算法+堆优化(模板)
/*使用优先队列Dijkstra算法复杂度O(ElogE)注意对vector E[MAXN]进行初始化后加边*/#include#include#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;const int MAXN=1000010;struct qnod原创 2016-08-22 20:01:45 · 3558 阅读 · 0 评论 -
Dijkstra模板(邻接矩阵)
///单源最短路,Dijkstra算法,邻接矩阵形式,复杂度O(n^2)///求出源st到所有点的最短路径,传入图的顶点数和邻接矩阵cost[][]///返回各点的最短路径lowcost[],路径pre[],pre[i]记录st到i路径上的父结点,pre[st]=-1///可以更改路径权类型,但权值必须为非负///点编号从0开始#include<iostream>#include<cst原创 2017-08-26 17:01:49 · 1236 阅读 · 0 评论 -
Dijkstra模板(优先队列)
#include &lt;iostream&gt;#include &lt;cstdio&gt;#include &lt;cstring&gt;#include &lt;cmath&gt;#include &lt;vector&gt;#include &lt;queue&gt;#include &a原创 2017-08-26 21:21:38 · 2871 阅读 · 0 评论 -
floyd模板
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;typedef long long LL;const int MAXN=1e3+5;const int INF=0x3f3f3f3f;int dist[MAXN][MAXN];void init(int n原创 2017-08-29 09:15:31 · 517 阅读 · 0 评论 -
Bellman-Ford模板
/*单源最短路bellman_ford算法,复杂度O(VE)可以处理负边权图。可以判断是否存在负环回路。返回true,当且仅当图中不包含从源点可达的负权回路先初始化,然后加入所有边点的编号从1开始(从0开始简单修改就可以了)*/#include<iostream>#include<cstdio>#include<vector>#include<cstring>#include<原创 2017-08-29 09:39:55 · 922 阅读 · 0 评论 -
SPFA模板
/*单源最短路SPFA时间复杂度O(kE)这个是队列实现,有时候改成栈实现会更加快,很容易修改这个复杂度是不定的*/#include<iostream>#include<cstdio>#include<vector>#include<queue>#include<fstream>#include<cstring>usi原创 2017-08-29 10:43:56 · 455 阅读 · 0 评论 -
Prim模板
/*Primq求MST耗费矩阵cost[][],标号从1开始,1~n返回最小生成树的权值,返回-1表示原图不连通*/#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int INF=0x3f3f3f3f;const int MAXN=505;int cost[MAXN][MA原创 2017-08-29 11:05:37 · 642 阅读 · 0 评论 -
Kruskal模板
///Kruskal求MST#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<vector>#include<string>#include<map>#include<set>#include<queue>#include<deque>#include<list>#includ原创 2017-08-31 08:32:40 · 536 阅读 · 0 评论 -
树状数组模板
int lowbit(int x) {return x&(-x);}int sum(int i)//求前i项和{ int s=0; while(i>0) { s+=bit[i]; i-=lowbit(i); } return s;}void add(int i,int val){ while(i<=n) {原创 2017-08-31 11:00:15 · 235 阅读 · 0 评论 -
读入挂
namespace fastIO { #define BUF_SIZE 100000 //fread -> read bool IOerror = 0; inline char nc() { static char buf[BUF_SIZE], *p1 = buf + BUF_SIZE, *pend = buf + BUF_SIZE;转载 2017-08-24 18:18:02 · 422 阅读 · 0 评论 -
高精度(乘法和加法)
#include#include#include#includeusing namespace std;/* 高精度,支持乘法和加法 */struct BigInt{ const static int mod=10000; const static int DLEN=4; int a[600],len; BigInt() {原创 2016-11-05 10:33:06 · 404 阅读 · 0 评论 -
Dijkstra单源最短路,邻接矩阵形式(模板)
/*单元最短路径,Dijkstra算法,邻接矩阵形式,复杂度为O(n^2)求出源beg到所有点的最短路径,传入图的顶点数和邻接矩阵cost[][]返回各点的最短路径lowcost[],路径pre[],pre[i]记录beg到i路径上的父结点,pre[beg]=-1可以更改路径权类型,但权值必须为非负*/#include#include#include#includeusing原创 2016-08-22 19:34:50 · 857 阅读 · 0 评论 -
单源最短路SPFA(模板)
/*单源最短路SPFA时间复杂度O(kE)这个是队列实现,有时候改成栈实现会更加快,很容易修改这个复杂度是不定的*/#include#include#include#include#include#includeusing namespace std;const int MAXN=1010;const int INF=0x3f3f3f3f;struct Edge原创 2016-08-23 21:12:39 · 430 阅读 · 0 评论 -
最小生成树-Prim算法(模板)
/*Primq求MST耗费矩阵cost[][],标号从0开始,0~n-1返回最小生成树的权值,返回-1表示原图不连通*/#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;const int MAXN=505;int cost[MAXN][MAXN];bool vis[MAXN];i原创 2016-08-24 23:19:13 · 627 阅读 · 0 评论 -
最小生成树-Kruskal算法(模板)
Kruskal基本算法:每次选取最短的边,看该边相连的两点是否在同一集合内,若在,则跳过,若不在,就把两个点合并,判断与合并都用并查集实现。Kruskal的复杂度是O(ElogE),适合稀疏图。/*Kruskal算法求MST*/#include#include#include#include#includeusing namespace std;con原创 2016-08-25 10:49:07 · 4779 阅读 · 4 评论 -
头文件+主函数
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;int main原创 2016-11-30 20:52:10 · 1071 阅读 · 0 评论 -
单源最短路 bellman_ford算法(模板)
/*单源最短路bellman_ford算法,复杂度O(VE)可以处理负边权图。可以判断是否存在负环回路。返回true,当且仅当图中不包含从源点可达的负权回路vector E;先E.clear()初始化,然后加入所有边点的编号从1开始(从0开始简单修改就可以了)*/#include#include#include#includeusing namespace std;con原创 2016-08-22 21:19:49 · 558 阅读 · 0 评论 -
LCA转RMQ
int dep[N<<1];//记录欧拉序列每个位置的深度int fin[N];//树中每个点第一次访问时的idxint p[N<<1];//欧拉序列int dp[N<<1][20];//ST表int cnt;//idx//p[]、dep[]以及dp的第一维记得开点数两倍。//因为这三个数组的操作对象都是欧拉序列,而欧拉序列长度为2*n-1int min(int i,int j){转载 2017-08-21 09:41:43 · 278 阅读 · 0 评论 -
LCA倍增
const int LOG = 20;//根据点数来取,取LOG >=logn就行了 20已经可以处理1e6以下的数据了int par[N][LOG],dep[N];void dfs(int u,int fa,int depth){ dep[u]=depth; if(u==1){ //对于根来说,往上跳无论几下都是他自己。我习惯把1定为根所以写 u == 1 for转载 2017-08-21 09:42:28 · 464 阅读 · 0 评论 -
ACM-Head
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define REP(i,a,b) for(int i=(a);iusing namespace std;typedef l原创 2018-01-29 13:36:12 · 240 阅读 · 0 评论