自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 100005using 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 50010using 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#includeusing 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<<29using 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 1000000007using 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 0X7FFFFFFFusing 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

RTclass 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

原创 质因数分解以及乘法逆元

RTinline 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

RTinline 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

原创 快速幂和快速乘法

RTll 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#includeusing 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

#includeusing namespace std;int main(){ printf("hello,world\n"); return 0;}

2015-08-02 10:14:28 317

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除