- 博客(29)
- 收藏
- 关注
原创 OR卷积
状压dp做 inline void prepare() { memset(dp,0,sizeof(dp)); for(int i=1;i<=N;i++) dp[f[i]]=1; for(int i=0;i<=20;i++) for(int j=0;j<=(1<<20);j++) { if((1<<i)&j) dp[j^(1<<i)]=max(dp[j],dp[j^
2016-10-14 09:08:37 390
原创 后缀数组
int n, a[MAXN], sa[MAXN], rk[MAXN], ht[MAXN], st[MAXN][MAXLOGN + 1]; inline void suffixArray() { static int set[MAXN]; std::copy(a, a + n, set); std::sort(set, set + n); int *end = std
2016-10-14 08:44:59 297
原创 高斯消元
普通高斯消元: double a[1005][1005]; double b[1005]; double value[1005]; inline void Swap(int A,int B) { double temp; for(int i=1;i<=N;i++) swap(a[A][i],a[B][i]); swap(b[A],b[B]); } inline int Gauss()
2016-08-15 13:44:23 325
原创 KMP算法
char A[1000005],B[1000005]; int next[1000005]; inline void Get_Next(char s[]) { int i,j;j=-1; next[0]=-1;int L=strlen(s); for(i=1;i<L;i++) { while(j>=0&&s[j+1]!=s[i]) j=next[j]; if(s[j+1]==s[i
2016-08-06 16:21:33 273
原创 Lucas求组合数
递推预处理所有数的逆元。 long long C(int n,int m) { if(n<m) return 0; if(n<MOD && m<MOD) return fac[n] * inv[m] % MOD * inv[n-m] % MOD ; return C(n/MOD,m/MOD) * C(n%MOD,m%MOD) % MOD ; }void P
2016-08-06 16:14:21 355
原创 主席树求静态区间第K大
#include #include #include #define MAXN 100005 using namespace std; int N,M; struct LS { int x,id; }a[MAXN]; struct Node { int l,r,cnt; }Seg[MAXN*20]; int mp[MAXN],f[MAXN]; inline bool cmp(LS
2016-06-01 23:50:22 445
原创 字典树Trie
int ch[1000005][26]; int val[1000005]; char c[1000005]; inline void insert(char* ss,int pos) { int now=0; int len=strlen(ss); for(int i=0;i<len;i++) { if(ch[now][ss[i]-'a']==0) { cur++;ch[n
2016-06-01 23:42:56 308
原创 RMQ模板
#include #include #include #include #define N 50010 using namespace std; int maxArr[N][16], minArr[N][16]; int n, q, num[N]; void Sparse_Table(){ int l = (int)(log((double)n) / log(2.0)); for
2015-10-22 13:16:13 340
原创 高斯消元模板
先处理成上三角矩阵,然后消元 #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef pair pii; #define N 1005 #define M 505 #def
2015-10-22 13:14:21 275
原创 线段树
维护/查询区间的数据结构 #include #include using namespace std; class Node { public: long long l; long long r; long long Value; long long Lazy; }; long long d[100001]; long long N; long long ANS=0; Node
2015-10-16 08:36:42 242
原创 Splay伸展树
查询一个数的前驱和后继 #include #include #include #include #define N 100005 #define inf 1<<29 using namespace std; int pre[N],key[N],ch[N][2],root,tot1; //分别表示父结点,键值,左右孩子(0为左孩子,1为右孩子),根结点,结点数量 int n; //新建一
2015-10-16 08:27:41 346
原创 莫队算法
暴力美学,通过分块的办法降低暴力的复杂度 class Type { public: LL l,r,kuai,num; }F[50005]; LL N,M,block; LL color[50005]; LL cnt[50005]; LL ans[50005]; LL l[50005],r[50005]; bool cmp(Type a,Type b) { if(
2015-10-16 08:08:18 251
原创 最小费用最大流
其实就是用SPFA去找增广路 跑EK就好了 vector map[500]; int pre[500]; int data[105][105]; int dist[500]; bool flag[500]; int R,N; struct Edge { int u,v,cap,cost; }F[10005]; inline void addedge(int u,int v,int cap
2015-10-15 21:36:42 519
原创 矩阵快速幂
快速计算递推式struct Matrix { int F[10][10]; }; inline Matrix Mul(Matrix A,Matrix B) { Matrix C; int i,j,k; for(i=1;i<=4;i++) for(j=1;j<=4;j++) { C.F[i][j]=0; for(k=1;k<=4;k++) { C.F[i][
2015-10-15 09:05:01 310
原创 离线Tarjan lca
int fa[20005],anc[20005]; bool flag[20005]; vector map[20005]; vector query[20005]; inline void inputTree() { int a,b; for(int i=1;i<=N;i++) map[i].clear(); for(int i=1;i<N;i++)
2015-10-13 23:18:26 457
原创 在线LCA倍增法
时间复杂度 O(logN) #include #include #include #include #include #include #include #define LL long long #define MOD 1000000007 using namespace std; int N,M,A,B; LL ans=0; int dep[100005]; int p[100005][50]
2015-10-13 10:44:28 366
原创 最小点权覆盖
dinic+当前弧优化 #include #include #include #include #include #include #include #define LL long long #define INF 0X7FFFFFFF using namespace std; int val[500]; int dist[1000]; int cur[500]; int N,M,S,T,R=-
2015-10-13 10:33:16 466
原创 SPFA
int SPFA() { int i,temp; dequeQ; bool flag[1001];//是否在队列中 int dist[1001]; memset(dist,63,sizeof(dist)); memset(flag,0,sizeof(flag)); flag[1]=1; Q.push_back(1);
2015-10-13 09:56:18 362
原创 Dijkstra
RT class woca { public: int x; int y; };//x下一个节点,y为权值 vector adj[10010]; int n,m,u,v,s; long long cost[10010],FZ[10010]; int dist[10010];bool CP[10010]; bool operator<(woca n,woca m) { if(n.y<
2015-08-27 14:42:26 361
原创 质因数分解以及乘法逆元
RT inline void EXGCD(LL a,LL b) { if(b==0) { X=1;Y=0; } else { EXGCD(b,a%b); LL p=X; X=Y; Y=p-(a/b)*Y; } } inline LL inve(LL num) { EXGCD(num,MOD); return X; } inline void Get_Factor
2015-08-27 14:17:19 340
原创 有向图Tarjan
RT inline void Tarjan(int x) { dfn[x]=low[x]=++index; flag[x]=1;push(x); for(int i=0;i<map[x].size();i++) { int next=map[x][i]; if(dfn[next]==-1) { Tarjan(next); low[x]=min(low[x],low
2015-08-26 20:31:01 359
原创 字典树
插入字典树: class woca { public: int son,brother; char p; }a[100000]; string A; void build_tree(string A) { int l=A.length(); int now=1; for(int i=0;i<l;i++) { if(a[now].son==0) { a[++sum].p=
2015-08-26 19:57:20 303
原创 二分图最大匹配
匈牙利算法: int match[140]; bool flag[140]; int map[140][140]; int dfs(int p) { int i; for(i=1;i<=N;i++) { if(map[p][i]==1&&flag[i]==0) { flag[i]=1; if(match[i]==-1||dfs(match[i])) { m
2015-08-26 19:44:50 297
原创 Dinic
网络流: bool bfs()//建层次图 { int i,temp;deque Q; Q.push_back(0);memset(dist,-1,sizeof(dist)); dist[0]=0; while(!Q.empty()) { temp=Q.at(0);Q.pop_front(); for(i=0;i<=N+1;i++) { if(map[temp][i
2015-08-26 19:43:05 363
原创 快速幂和快速乘法
RT ll Quick_Pow(ll a,ll n) { ll ret=1; ll temp=a%p; while (n){ if (n&1) ret=ret*temp%p; temp=temp*temp%p; n>>=1; } return ret; } ll Quick_Mul(ll x,ll m)
2015-08-26 19:42:12 378
原创 线性筛
线性筛法 #define M 100000 LL prime[M/3]; bool flag[M]; inline void get_prime() { LL i,j; memset(flag,false,sizeof(flag)); for(i=2;i<M;i++){ if(!flag[i])
2015-08-26 19:35:27 442
原创 树链剖分
做了两个题找了找感觉。 分别是 SPOJ375 和 codeforces191c,都是用线段树维护的。其实第二题不用线段树也可以。。关键是理解树链剖分的过程,然后找合适的数据结构去维护它。 SPOJ375:等下。。。 codeforces191c:#include #include #include #include using namespace std; struct Nod
2015-08-10 16:05:37 374
原创 手写邻接表
int head[400005],t; inline void init() { memset(head,0,sizeof(head)); t=1; } inline void add(int u,int v,int w) { map[t].u=u; map[t].v=v; map[t].w=w; map[t].next=head[u]; head[u]=t;t++; }
2015-08-10 16:04:22 412
原创 Test
#include using namespace std; int main() { printf("hello,world\n"); return 0; }
2015-08-02 10:14:28 317
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人