自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

转载 动态dp

luogu4719是模板题了看了RabitHu的题解简言之树链剖分建一颗线段树维护该段[l,r]的部分答案([l,r]这段不一定联通)部分答案:不包括重儿子的答案这样就勉强维护了复杂度矩阵乘法只是把转移方程写成矩阵的形式无脑又好写//Ctrl+V毫无压力#include <cstdio>#include <cstring>#include ...

2018-11-30 21:17:00 93

转载 51nod次日游

幸运的是比赛过程中机子一直没出什么故障比赛发的面包厚实的啊,水发得有点晚了比赛结束,乐成一群大佬阿卡,被吓死了。确实很久没有用心对待一件事情了\看小说也很不认真啊-颓了一下午,看小说《侠客行》什么的准备明天上车看,xj的饭菜真的很不用心啊所以晚饭吃的泡面晚上要正经起来了51nod1125看到交换会想到这是多个环,那么代价最小的方案要么是用环内最小的与其他元素分别交换,...

2018-11-10 21:26:00 96

转载 51nod一日游

忽然意识到昨天交了十几发的CE是因为没选择语言qwq本来准备按着题目分类刷一遍的,看来是刷不完了1618树或非树树链剖分思路还是挺简单的吧?把环拎出来单独处理(n条边的联通图存在且仅存在一个环),那么若不考虑环图中的连通图个数=总点数-"开"的边数若这条环联通了,那么实际上有一条边并没有是减少联通块个数,但答案却已经减去了,所以ans++边的开合用树链剖分维护即可#...

2018-11-08 16:21:00 95

转载 牛客练习赛30消消乐

r神在和小b比赛玩一个名为“消消乐”的游戏,在一个n*m的棋盘上,一些棋子分布在格点上,游戏玩家有一个名为超蓝光波的武器,可以消除一行或者一列的所有棋子,使用超蓝光波需要耗费一点能量,消除完所有的棋子之后,花费能量越少得分越高。r神为了超过排名第一的小b,夺得荣誉称号“天下第一”,他需要寻求你的帮助,他希望知道最少需要使用多少次“超蓝光波”,以及在哪行、哪列使用。主要是第二问吧二分...

2018-11-04 13:46:00 155

转载 Wannafly挑战赛D绿魔法师

迭代器相关定义rbegin和rend要用逆向迭代器reverse_iterator不过auto只有c++11才能用TWT一个还挺好用的c++11编辑器#include<bits/stdc++.h>using namespace std;const int N=1e5+5;inline void read(int &x){ char c=getch...

2018-11-02 11:19:00 72

转载 bzoj2982

求组合数的板子lucas相关#include<cstdio>#include<cctype>inline void read(int &x){ char ch=getchar();x=0; for(;!isdigit(ch);ch=getchar()); for(;isdigit(ch);ch=getchar())x=(x&...

2018-10-30 07:58:00 77

转载 bzoj3551

本题强制在线,bzoj3545不强制在线转自SFN1036的题解一开始yy出了一种用可持久化线段树来维护可持久化的root数组,然后其他的就像离线那样,只是每次合并线段树的时候不改变原来两棵树的儿子,而是新建节点。恩理论上好像是可以的,但是懒得写。这题可以用一种叫Kruskal重构树的东西来搞,具体看PoPoQQQ大爷的题解。大概就是说一开始新图中没有边,做小生成树的时候,每次加...

2018-10-28 16:07:00 117

转载 bzoj3732

转自hwzzyr的博客kruskal重构树由于重构树中把原树的点权转换成为了新建节点的边权,这一过程是这样实现的。首先对边排序然后使用并查集辅助加边,每新建一条边时:新建节点indexindex(编号从n+1n+1开始)将原有两节点所在集合改为indexindex将原有节点与indexindex连边新建节点的权值为当前边的边权给一下简单的代码void Ex_Krus...

2018-10-28 14:38:00 80

转载 bzoj1079

来自 ljh的结题报告.解题报告:  这道题好神啊,合并操作的确很具有代表性。  如果考虑如何求方案数,不妨DP统计,因为直接枚举与转移复杂度太大。我们选择把剩余可涂次数相等的分为一类,考虑因为只要剩余可涂次数相等,那么其实这些颜色并没有什么区别,因为我们涂颜色的时候只需要考虑涂的这种颜色剩余次数即可,并不需要考虑具体是什么颜色(先不考虑相邻颜色不能相等的限制)。  那么令f[a...

2018-10-28 07:40:00 61

转载 bzoj5185

先把存在被包含关系的去掉考虑到DP方程f[i][j]表示到第i个,且保留第i个,删除j个f[i][k]=max{f[j][k-(i-j-1)]+min(a[i].r-a[i].l,a[i].r-a[j].r)}把公式中min(a[i].r-a[i].l,a[i].r-a[j].r)为a[i].r-a[i].l不断向右更新,此时,因为由dp[x][y]->dp[i][j] 需...

2018-10-27 20:10:00 68

转载 bzoj4003

用左偏树不断向上维护仍在[浴血奋战的]骑士攻击力,不断维护tag维护即可#include<cstdio>#include<cctype>#define ml(x) tr[x].ml#define ad(x) tr[x].ad#define ls(x) tr[x].l#define rs(x) tr[x].r#define vl(x) tr[x].va...

2018-10-27 19:53:00 106

转载 bzoj5185

转载自[https://blog.csdn.net/elijahqi/article/details/79874902]首先贪心的把包含于其他线段的线段删除 然后按照左端点排序 那么显然右端点也是单调递增的设dp[i][k]表示 前i条线段删除k条 i这条线段必须选的最大覆盖长度是多少那么dp[i][k]=max{dp[j][k-(i-j-1)]};那么显然可以知道我加入由dp[...

2018-10-26 21:21:00 46

转载 bzoj1009

kmp和矩阵乘法的运用,还是挺明显的#include<cstdio>#include<cctype>using namespace std;inline void read(int &x){ char ch=getchar();x=0; for(;!isdigit(ch);ch=getchar()); for(;isdigi...

2018-10-13 10:31:00 50

转载 bzoj2260&4349

只是为了贴上自己的朱刘算法模板#include<bits/stdc++.h>using namespace std;const int N=102;int b[N],mark[N],color[N],pre[N],ne;double low[N],in[N];struct edges{int u,v;double w;}e[N*N];inline void ad...

2018-08-04 10:56:00 48

转载 poj3164

朱刘算法差分?。。。(粘的别人代码)考虑存在环,则该环中必定去一条边,且往外扩展一条边,那先假设环上所有边都选,则实际选择+w[v出]-w[v环上入]#include<cstdio>#include<cmath>using namespace std;const int inf=0x7fffffff;int n,m,cnt_edge,pre[105...

2018-08-04 09:45:00 89

转载 bzoj2595

枚举子树的形态:dp[i][j]=min(dp[i][j],dp[i][k]+dp[i][l])dp[i][j]=min(dp[i][j],dp[i][k]+dp[i][l]),其中kk和ll是对j的一个划分按照边进行松弛:dp[i][j]=min(dp[i][j],dp[i′][j]+w[i][i′])dp[i][j]=min(dp[i][j],dp[i′][j]+w[i][i′])...

2018-08-02 13:32:00 88

转载 bzoj2959

#include<bits/stdc++.h>using namespace std;const int maxn=150002;int n,m,s[maxn],fa[maxn],c[2][maxn],rev[maxn],f[maxn],F[maxn],v[maxn],V[maxn];inline void read(int &x){ char ch=...

2018-08-01 09:58:00 78

转载 bzoj1251

作为我以后的模板吧#include<cstdio>#include<cctype>#include<algorithm>using namespace std;const int maxn=150002;int n,m,rt,w[maxn],tr[maxn][2],mx[maxn],siz[maxn],rev[maxn],tag[maxn]...

2018-07-18 17:06:00 53

转载 2018CodeM复赛

待续。。。官方题解前言:这场比赛打得非常坎坷,刚开始以为7:30开始,结果迟进赛场。然后因为是在家里打,键盘好难用啊=_=哔——地一声,电脑关机,发现充电线没插好。。。插好之后,肚子饿->去翻柜子吃东西,所以解题速度就变成这样了?!ADPB水水的二分题,我竟然在二分判断可行解时用了tarjan,虽然也卡过去了,但明显用拓扑序更优C其实就是先将已确定的边相连,同时求...

2018-07-09 08:00:00 119

转载 poj3683

2-SAT算法流程1.建立选择边2.tarjan缩点(同一块内必然同时选择),判断是否存在可行解(若存在一对对立点{2*i,2*i-1}在同一块内,则不可行)3.把缩点后的块之间建立反向选择边,并传递不选择命令(code中用op[ ]数组记录)4.按照拓扑序找到一为选择的点(块),标为选择,传递不选择标记//poj3683#include<iostrea...

2018-07-03 07:51:00 55

转载 bzoj3991

构建虚树,每次在set中维护其前驱,后继,更新#include<cstdio>#include<iostream>#include<set>#define N 111111#define inf 1e9using namespace std;set<int> st;int n,m,k,i,x,y,z,u,...

2018-07-02 07:49:00 92

转载 bzoj2809

枚举管理者则一定派遣子树中薪水最低的忍者,对于每个节点维护子树大根堆若堆中忍者薪水和大于M,则pop#include<cstdio>#include<cctype>#include<algorithm>#define ll long longusing namespace std;const int maxn=1...

2018-06-20 20:54:00 52

转载 bzoj1001

注意双向边正反边容量相同#include<cstdio>#include<cstring>#include<cctype>#include<queue>#define maxn 1000005#define inf 1000000007using namespace std;int n,m,S,T,hd,...

2018-06-20 19:33:00 40

转载 bzoj1412

从狼向空格或羊剪边,从空格向空格或羊建边,最大流最小割最大流dinic打法(这里用了当前弧优化)diniv当前弧优化讲解#include<cstdio>#include<cctype>#include<queue>#include<cstring>#define maxn 10002#define ...

2018-06-20 16:57:00 47

转载 计蒜之道2018复赛

待续。。。A题考虑任意两个一次函数,哪个放在里面更有y=ax+b和y=cx+d;sort时满足(ax+b)x+d>(cx+d)x+b即可,在O(n)计算即可D题#include<cstdio>#include<cstring>#include<vector>#include<algor...

2018-06-19 18:54:00 82

转载 HDU2255

二分图最大匹配基础详见这题是最大权二分图匹配模板讲解(小黄书上也是有的,讲解也很清晰)#include<cstdio>#include<cstring>#include<cctype>#include<algorithm>using namespace std;int n,w[302][302]...

2018-06-13 06:56:00 49

转载 bzoj1010

1.HDU3507数学分析2.bzoj1010原理解释题解根据动规方程状态i从状态j转化而来, y只与j有关,k与i,j有关,b只与i或常数有关,可得直线方程y=kx+b,本题让b尽量小,故维护下凸包,使k单调递增则已确认了当前直线的斜率,取得的j即为当前直线向左碰到的第一个点无论如何,一定不会碰到斜率更小的,更新head;插入当前点,同时维护下凸包性质,...

2018-06-10 20:50:00 83

转载 bzoj2006

确认右端点后,即可确认左端点的范围,则能确认该右端点能取到的最大值(用前缀和维护sum=s[i]-s[j],s[i]确认,则用ST表维护s[j]最小值)用优先队列维护,每次取最大值,再将以该右端点为右端点的左右两段区间最值分别放入队列中#include<cstdio>#include<cctype>#include<queue>...

2018-06-09 15:38:00 50

转载 luogu2072

treap模板题#include<cstdio>#include<cctype>#include<algorithm>using namespace std;int cnt,rt,w,c;long long sumc,sumw;struct data{int w,c,ls,rs;}a[100002];inline v...

2018-06-09 13:28:00 63

转载 bzoj2631

非常好的一篇博客(LCT)题解来源(LCT)先抄了一遍板子【注意数据范围】#include<cstdio>#include<cctype>#include<algorithm>#define ls tr[x][0]#define rs tr[x][1]#define ui unsigned intusing na...

2018-05-23 22:19:00 52

转载 bzoj2002

非常好的一篇博客(LCT)时间效率相差不大1.分块#include<cstdio>#include<cmath>#include<cctype>using namespace std;const int maxn=200004;int n,cnt,num,whic[maxn],a[maxn],l[510],r[510...

2018-05-23 21:33:00 36

转载 bzoj3223

对于区间翻转操作,将l-1(代码中建了[1,n+2]个点,故这里为l)先旋转到根,再将r+1(同上,这里为r+2)旋至其右儿子,则r+1的左儿子即我们要翻转的区间tip:在find时已经更新了rev,所以可以splay【感觉我的buildtr好恶心啊】#include<cstdio>#include<cctype>#include<a...

2018-05-23 20:47:00 52

转载 luogu3690

非常好的一篇博客写下之前自己被困住的几个点吧:1.access找的不是到真实的根的一条路径,而是到能找到的最上面的splay的根(makeroot同理)2.findroot找的是x所在原树的树根(深度最小),并旋转至当前一棵splay的根tips:具体的还是没特别懂,多做题吧#include<cstdio>#include<cctype&gt...

2018-05-20 21:31:00 45

转载 bzoj4472

初始时将1的限制赋为无穷大,然后对每个节点贪心,从大往小取,知道能取得的元素的最大值小于0比较唯一性时注意下#include<cstdio>#include<cctype>#include<algorithm>#define maxn 100002using namespace std;bool vis[maxn];...

2018-05-20 14:07:00 71

转载 bzoj1588

1.treap一棵treap维护一下就可以了吧(压行导致代码格式不怎么美观)#include<cstdio>#include<cctype>#include<cmath>#include<algorithm>#define maxn 32770using namespace std;struct data...

2018-05-19 09:52:00 64

转载 bzoj2733

1.treap每个点建一棵treap,维护优先级,然后启发式合并两棵treap#include<cstdio>#include<cctype>#include<algorithm>#define maxn 100002using namespace std;int rt[maxn],fa[maxn],n,m,q;st...

2018-05-19 09:26:00 50

转载 bzoj2761

事实证明,数据存在负数?用treap确实小题大做了#include<cstdio>#include<cctype>#include<cstring>#include<cstdlib>using namespace std;int n,siz,rt,x,flag;struct data{int rnd,va...

2018-05-18 18:38:00 80

转载 bzoj4033

树形DPf[i][j]就表示以i为根的子树中染了多少个黑点。我们可以发现,假设枚举了一条边i(x,y,c),那么它对收益的贡献就是c*(x那边黑点的个数*y那边黑点的个数+x那边白点的个数*y那边白点的个数)。假设在做以x为根的子树,枚举到了它的儿子y,然后就枚举x子树中黑点的个数i和y子树中黑点的个数j(注意:此时y还没归到x中,即这是个独立的枚举,x中的黑点只包含已经跑过了的儿子...

2018-05-18 14:50:00 85

转载 bzoj2648

板子,和1941非常像#include<cstdio>#include<cctype>#include<cmath>#include<algorithm>#define maxn 1000001using namespace std;int n,m,rt,cmpd,tot,res;struct data{...

2018-05-16 20:33:00 138

转载 bzoj1941

K-D TREE算法原理及实现板子题,但这题很神奇的是加了一个优化以后直接从11292ms跑成了1548ms(即代码中替换掉注释部分的内容)优化具体原理应该是先将maxans/minans尽量放大/减小这题求的是每个点到其他点的最长路径和最短路径,符合kd-tree的应用范围,那么优化的暴力就来了这里的mindis尤其要注意,一开始写错了都没发现#inclu...

2018-05-16 19:30:00 163

空空如也

空空如也

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

TA关注的人

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