自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zP1nG

Only the Paranoid Survive.

  • 博客(38)
  • 收藏
  • 关注

原创 Markdown编辑公式

拿小本本记下来。。。

2017-12-27 21:00:53 376

原创 【bzoj 1050】旅行comf(Kruskal算法)

传送门biu~ 将边排序,枚举最小边,用类似Kruskal的方法加边横并点集,当S和T属于一个集合时,最后加入的边一定是最大边。#include<bits/stdc++.h>using namespace std;int n,m,ansA=-1,ansB,s,t;int father[505];struct edge{int x,y,len;}a[5005];bool cmp(edge

2017-12-27 20:17:13 284

原创 【bzoj 3073】Journeys(线段树优化建图)

传送门biu~ 线段树的每个节点代表一个区间,建两棵线段树。 出线段树每个点向父节点连边0,表示如果能从这个区间出发也就可以从父区间出发。入线段树每个点向子节点连边0,表示如果能到达这个区间也就可以到达子区间。 入线段树每个点向出线段树的平行结点连边0,表示如果能到达这个区间也可以从这个区间出发。 在线段树上跑最短路,到叶子节点的路径长即为最短路径。#include<bits/stdc+

2017-12-27 20:03:21 470

原创 【bzoj 2743】采花(树状数组)

传送门biu~ 整个序列做成树状数组。把询问离线,按左端点排序。对于左端点相同的点,把每种颜色第二次出现的位置加上一,这样前缀和就代表有多少种出现过至少两次的花了。向右枚举左端点时更改加一的位置。时间复杂度O(mlog(m)+n+mlog(n))。#include<bits/stdc++.h>#define lowbit(x) (x&(-x))using namespace std;int

2017-12-27 19:53:35 305

原创 【bzoj 2834】回家的路(分层图最短路)

传送门biu~ 把一个点拆成两个点,一个代表横向连接的点,一个代表纵向连接的点,用权为1的边连接。首先对于每个横向连接的点,同一行按顺序连边,权值为距离的二倍,纵向同理。跑一遍最短路就可以了。#include<bits/stdc++.h>using namespace std;int n,m;int head[200005],nex[1000005],to[1000005],v[100000

2017-12-27 19:45:41 623

原创 【bzoj 2115】Xor(线性基)

传送门biu~ 我们可以先dfs求出图中的所有环,显然在从1走到n的过程中可以随意获得任意环的异或和。所以把环的异或和都求出来,再随意选择一条从1~n的路径。用线性基求解。#include<bits/stdc++.h>using namespace std;int n,m;int head[50005],nex[200005],to[200005],tp;long long val[200

2017-12-21 00:04:05 284

原创 【bzoj 2460】元素(线性基)

传送门biu~这里写链接内容#include<bits/stdc++.h>using namespace std;struct data{ long long num; int sum;}a[1005];bool cmp(data a,data b){return a.sum>b.sum;}long long b[64],ans;int main(){ int n

2017-12-21 00:00:51 252

原创 【模板】LCT

bzoj 2631 tree#include<bits/stdc++.h>using namespace std;#define int long longconst int mod=51061;struct Node{ Node *ch[2],*fa; int s,val,sum,add_mark,times_mark; bool rev_mark; int

2017-12-19 22:41:48 233

原创 【bzoj 3261】最大异或和(可持久化Trie树)

传送门biu~ 可持久化Trie树。 设bib_i为1到i的异或和,则相当于求max(bp−1xorbnxorx)max(b_{p-1}\;xor\;b_n\;xor\;x )。每次向Trie树中加入bib_i。在每次加一个数的时候把Trie树的这条链的每个点权加一。查询L到R区间时相当于查询bL−1b_{L-1}到bR−1b_{R-1}之间的最优解。用Trie树的第R-1个版本减去第L-2个

2017-12-16 15:49:58 336

原创 【模板】可持久化线段树(主席树)

当修改线段树产生新的版本时,对于不需要修改的区间,直接指向原有的点,需要修改的区间,建立新点并连过去。 所以只需要维护m棵线段树的根,动态开点就可以了。 【模板】可持久化数组(可持久化线段树/平衡树) 洛谷P3919 #include<bits/stdc++.h>using namespace std;const int N=1e6+5;struct Node{ int val;

2017-12-15 19:51:42 290

原创 【bzoj 1419】Red is good(期望DP)

传送门biu~ f[i][j]表示还剩i张红的j张黑的时的期望花费。随时可以不取,所以和0取max。#include<bits/stdc++.h>using namespace std;double f[2][5010];int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;++i){ i

2017-12-15 15:58:22 217

原创 【模板】替罪羊树

代码取自BlackJack Flag:我总有一天会把他辣眼睛的数组非递归式改成指针递归式! bzoj 3224 普通平衡树#include<bits/stdc++.h>using namespace std;const int N=100005,INF=1e9;const double alpha=0.75;struct sctree{int ch[2],fa,siz,val;}tree

2017-12-15 14:35:56 325

原创 【bzoj 1823】满汉全席(2-SAT)

传送门biu~ 2-SAT裸题。详见代码。#include<bits/stdc++.h>using namespace std;int n,m,num,time_clock,top;int head[205],nex[2005],to[2005],in[205],tp;int low[205],dfn[205],stac[205];inline void add(int x,int y)

2017-12-14 23:36:31 297

原创 【bzoj 3675】序列分割(斜率优化DP)

传送门biu~#include<bits/stdc++.h>#define LL long longusing namespace std;struct point{ LL x,y; double slope; point(LL _=0,LL __=0){ x=_; y=__; slope=0.0; }}stac

2017-12-14 17:34:45 321

原创 【bzoj 1069】最大土地面积(旋转卡壳)

传送门biu~ 枚举一条对角线,在对角线两端分别求最大三角形,旋转卡壳。#include<bits/stdc++.h>using namespace std;int tp,n;struct point{ double x,y; point() {} point(double _,double __){x=_;y=__;} }p[2005],s[2005];d

2017-12-14 10:01:54 268

原创 【bzoj 2618】凸多边形(半平面交)

传送门biu~ 把每个边看成一个向量,向量左边为指定区域。用向量求交点,用向量判断一个点是否在这条向量的左面。先在一个单调队列中不断加元素,最后再删队首队尾。注意细节。#include<bits/stdc++.h>using namespace std;const double eps=1e-9;struct point{ double x,y; point(double _

2017-12-13 15:33:13 280

原创 【bzoj 1007】水平可见直线(凸包)

传送门biu~ 先按斜率排序,将两条线入栈,依次添加每条直线,如果与栈顶直线的交点在上一个交点的左边,弹栈。这样就可以维护一个开口向上的半凸包。这是因为对于一个开口向上的半凸包,从左向右看,直线的斜率是递增的,点的x坐标也都是递增的。#include<bits/stdc++.h>using namespace std;struct point{ double x,y; poin

2017-12-13 07:38:11 437

原创 【bzoj 2946】公共串(后缀自动机)

传送门biu~ 后缀自动机模板题。#include<bits/stdc++.h>using namespace std;const int INF=1e9;struct Node{ Node *fa,*ch[26]; int val,len[6]; Node(int _=0){ val=_; fa=NULL; memse

2017-12-12 11:12:02 347

原创 【bzoj 1031】字符加密Cipher(后缀数组)

传送门biu~ 裸的后缀数组模板,细节很多。#include<bits/stdc++.h>#define N 100005using namespace std;int len;int sum[2*N],tmp[2*N],rank[2*N],x[2*N],y[2*N],sa[2*N];char s[2*N];void get_rank(){ for(int i=1;i<=len

2017-12-12 00:24:19 261

原创 【bzoj 3110】K大数查询(整体二分)

传送门biu~ 整体二分。我选择把数据用树状数组维护,树状数组可以支持区间修改区间查询。 你们可能永远不会知道一道题没开long long要调多久QAQ#include#define lowbit(x) (x&(-x))using namespace std;#define int long longstruct data{ int opt,x,y,c;}a[5000

2017-12-11 15:06:19 245

原创 【模板】树状数组的区间加值和区间查询

树状数组可以实现单点修改区间查询,或是差分的区间修改单点查询。【点这里】 那么树状数组能不能实现区间加值区间查询呢? 原始序列为a[]。我们先考虑区间加值,用差分的方式维护一个d[]数组,d[x]表示的是[x,maxn]每个数的增量。 那么如果需要查询1~x的前缀和,需要查的是 sumx=sigma(ai)+d1∗x+d2∗(x−1)+d3∗(x−2)+...+dx∗1sum_x=sigma

2017-12-11 09:40:34 780

原创 【bzoj 2527】Meteors(整体二分)

传送门biu~ 整体二分,二分需要等多少场陨石雨能够收集足够。尤其需要注意此题数据需要double类型的树状数组才能过。别问我怎么知道的。#include#define lowbit(x) (x&(-x))using namespace std;int n,m,k,p,now;int head[300005],nex[300005],q[300005],tmp[300005],a

2017-12-10 19:20:05 286

原创 【bzoj 1022】小约翰的游戏John(博弈论)

传送门biu~ Anti-Nim游戏。 石子数全为1的情况: 偶数个石子堆的局面为胜局。 石子数不全为1的情况: 异或和不为0的局面为胜局。#include<bits/stdc++.h>using namespace std;bool solve(){ int n; scanf("%d",&n); int Xor=0; bool flag=1; fo

2017-12-10 00:23:12 377

原创 【bzoj 2301】Problem b(莫比乌斯反演)

传送门biu~#include<bits/stdc++.h>using namespace std;int u[100005],prime[100005],tp;bool b[100005];void get_u(){ u[1]=1; for(int i=2;i<=100000;++i){ if(!b[i]) prime[++tp]=i,u[i]=-1;

2017-12-09 00:22:44 250

原创 【bzoj 1982】Moving Pebbles(博弈论)

传送门biu~ 可以发现,当n为偶数,且将石子数相同的堆两两配对可以配成n/2对 时先手必败,因为后手可以对另一个堆做先手同样的事情。 其它情况先手都可以一步把状态变为先手必败。 如果初始有奇数堆石子,那么先手可以将最小的堆和第二小的堆配对,第三小的堆和第四小的堆配对,…,然后用最大的堆填补差值,显然一定能填补上; 如果初始有偶数堆石子,那么先手可以将最大的堆和最小的堆配对,第二小的堆和第

2017-12-08 23:39:46 280

原创 【模板】Splay

bzoj 3223#include<bits/stdc++.h>using namespace std;struct Node{ Node *ch[2],*fa; int key,siz; bool flip; Node(int); int dir(int val){ if(val==ch[0]->siz+1) return -1;

2017-12-08 15:01:44 237

原创 【bzoj 2194】快速傅立叶之二(FFT)

传送门biu~ FFT没有完全搞懂,扒了一份LZJ209学长的代码留着以后慢慢理解。#include<bits/stdc++.h>using namespace std;const double DFT=2.0,IDFT=-2.0,pi=acos(-1);double trans_form;int len,pos[300005];struct data{ double a,b;

2017-12-08 00:02:30 236

原创 【bzoj 2369】区间 & 【bzoj 2687】交与并 (CDQ分治)

传送门biu~ biu~ 可以证明取一堆区间的权值等价于只取最左边和最右边的区间,所以答案最多只用选两个区间。 先把一个区间包含在另一个区间的情况排除。那么最后排完序的区间一定是左右端点都递增的。对于一个区间i,他左侧的最优决策区间wi一定是单调不降的,所以采用CDQ分治。#include<bits/stdc++.h>using namespace std;const int INF=1e9

2017-12-07 16:06:32 518

原创 【bzoj 1468】Tree(树的点分治)

传送门biu~ 另一种点分治的写法。求出所有路径,再用容斥减去在同一棵子树中的路径。#includeusing namespace std;int n,k,center,len,ans;int fa[40005],siz[40005],s[40005],d[40005];int head[40005],nex[80005],to[80005],val[80005],tp;boo

2017-12-07 10:07:39 276

原创 【bzoj 2152】聪聪可可(树的点分治)

传送门biu~ 这道题才是树分治裸题。。#includeusing namespace std;int n,center,ans;bool b[20005];int f[3],g[3];int head[20005],nex[40005],to[40005],val[40005],tp;inline void add(int x,int y,int z){ nex[+

2017-12-06 20:29:04 245

原创 【bzoj 2212】Tree Rotations(线段树合并)

传送门biu~ 每个节点建一条权值线段树,递归合并。#include<bits/stdc++.h>using namespace std;int n;long long ans,ansL,ansR;struct Node{ Node *ch[2]; int num; Node(){ch[0]=ch[1]=NULL;num=0;} void maintain(

2017-12-06 18:07:19 258

原创 【bzoj 1588】营业额统计(链表)

传送门biu~ 都说这是splay题,但是明明可以用链表水过。因为我平衡树调不对。 反向找前驱后继然后在链表中删去就可以了。 (还有个叫Duan2baka的人用Treap写过【点这里】)#include<bits/stdc++.h>using namespace std;struct data{ int t,v; int Left,Right;}a[40005];boo

2017-12-06 10:40:35 461

原创 【bzoj 3262】陌上花开(CDQ分治)

传送门biu~ 三维偏序。CDQ分治裸题。#include<bits/stdc++.h>#define lowbit(x) (x&(-x))using namespace std;int n,k,tp;int ans[100005];struct data{ int x,y,z,num,ans; data(){num=1;ans=0;} bool operator

2017-12-05 20:08:26 304

原创 【bzoj 2738】矩阵乘法(整体二分+树状数组)

传送门biu~#include#define max(x,y) (x>y?x:y)#define lowbit(x) (x&(-x))using namespace std;int n,m,Max_num;int ans[600005],now;struct data{ int x,y,val; void read(){scanf("%d",&val);}

2017-12-05 17:57:14 272

原创 【bzoj 1176】Mokia(CDQ分治)

传送门biu~ 先记录事件,把每次查询拆为四个。按时间分治,每次考虑左边的修改对右边的查询的影响。用树状数组维护当前行上面的所有行的数值的和。#include<bits/stdc++.h>#define lowbit(x) (x&(-x))#define INF 2000000000using namespace std;int s,w;int time_clock[2000005],n

2017-12-05 10:11:39 302

原创 【bzoj 3697】采药人的路径(树的点分治)

传送门biu~ 树的点分治。把0边权改为-1,记录出现过休息点的路径数目和没出现过休息点的路径数目。答案即为两条路径都有休息点的方案数加上只有一个休息点的方案数。#include#define max(x,y) (x>y?x:y)#define min(x,y) (x#define N 100005using namespace std;int n,center,Max,Min

2017-12-04 23:51:35 321

原创 【bzoj 4399】魔法少女LJJ(线段树合并)

传送门biu~ 题解:c<=7#include<bits/stdc++.h>#define N 400005#define INF 1000000000using namespace std;struct Node{ Node* ch[2]; int siz; double sum; Node(){ ch[0]=ch[1]=NULL;

2017-12-04 14:17:56 409 2

原创 【bzoj 4756】Promotion Counting(线段树合并)

传送门biu~ 对于每一个节点建一个权值线段树。遍历每一棵子树,然后将子树的线段树合并到自己的线段树上。#include<bits/stdc++.h>#define N 100005using namespace std;int n,ans[N];struct Node{ Node*ch[2]; int L,R,sum; Node(int l,int r){

2017-12-04 10:14:45 322

空空如也

空空如也

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

TA关注的人

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