关闭

[置顶] bzoj 1977 (浅谈如何hack掉hzwer学长)(严格次小生成树)(LCA+kruskal)

传送门 题解:(**以下内容出自代码有错但是过了bzoj评测的hwzer学长**)先求出最小生成树,要严格次小。枚举每一条非树边找俩顶点树链上的最大边(如果最大边相同与非树边边权相同则找次大边)然后更新最小增量。最大边和次大边可以通过树上倍增求出。 下证hzwer学长和其他一些同学的错误,以hzwer的代码为例: void cal(int x,int f,int v) { int...
阅读(17) 评论(0)

[置顶] 莫比乌斯入门:bzoj 1101 Zap(Mobius)

传送门 题解: #include using namespace std; const int MAXN=50002,INF=0x3f3f3f3f; int mu[MAXN],prime[MAXN],tot=0; bool vis[MAXN]; inline void linear_shaker() { memset(vis,false,sizeof(vis...
阅读(53) 评论(0)

[置顶] 莫比乌斯进阶:bzoj 2693 jzptab(Mobius)

传送门 题解: 实在看不下去以前打的巨丑的LaTex公式,于是重新打一遍顺便复习一下。(那个D=d*k的那一杠是word的输入符,请不要介意。。。) 最后一行括号里那个带sigma的式子设为f(D),是一个积性函数(具体证明牵扯到狄利克雷卷积(参看zyf2000的博客),懒得写了一大堆,我要碎觉 (╯‵□′)╯︵┻━┻ )。 若D为一个质数,由莫比乌斯函数μ的性质,f(D)=D-D^2,...
阅读(104) 评论(0)

[置顶] 莫比乌斯进阶:bzoj 3994 约数个数和(Mobius)

传送门 题解: 简直完美 对于求约数个数,可以参看这一篇blog 除了线性筛,可以O(n√n)求(网上很多博客中就是这么做的),不过有更快的方法,代码复杂度又不高,为啥不用(ง •̀_•́)ง。#include using namespace std; typedef long long ll; const int MAXN=5e4+5;...
阅读(71) 评论(0)

[置顶] 莫比乌斯进阶:bzoj 4407 于神之怒加强版(Mobius)

传送门 那两对很高的括号也是向下取整,代码中g(x)就是推到过程中的f(x)函数 P.S.现在才真正理解到原创的辛苦orz#include using namespace std; typedef long long ll; const int maxn=5e6+2; const ll MOD=1e9+7; ll f[maxn],g[maxn],prime[ma...
阅读(90) 评论(0)

poj 3252(数位dp)

传送门 题解: 数位dp基础题。注意前导0的特殊处理。 P.S.空间优化:dfs函数中0和1的两个计数参数,可以二合一为cnt,表示0和1的差值,计算时整体右移32位即可(防止下标为负) #include #include #include #include using namespace std; int s,t,dp[33][33][33],b[33];//当前数位,当前0的出现次数,...
阅读(3) 评论(0)

bzoj 3223(非旋转treap/splay)

传送门 ~~~给不会写splay的Oier的福利~~~ 题解: 维护一个合并式treap,打个类似于线段树lazy_tag的rev标记,每次需要翻转再进行左右儿子交换,记得pushdown就好。 最后中序遍历一次treap即可得到所有操作后的序列。 P.S.splay版的就不贴代码了,网上到处都有,下面是的合并式treap,与splay相比,速度略快(不靠读入优化),代码略短(^...
阅读(3) 评论(1)

bzoj 3594(树状数组优化dp)

传送门 题解: 设dp[i][j]表示前i个玉米用j次操作的LIS长度。 dp[i][j]=max{dp[x][y]}+1(x 维护一个关于(j,max{a[i]}+j)的树状数组,每次倒序枚举j防止dp[i]内部自己更新自己,如果正序枚举可能发现这种情况:dp[i][k]更新到后来dp[i][j](k 由dp转移式知dp[i][...]只能被dp[比i小的数][...]更新到。 ...
阅读(9) 评论(0)

bzoj 1087(状压dp)

传送门 题解: 先预处理st[i]和num[i]两个数组,表示第i个自身合法的状态是啥以及它有多少个1,定义d[i][j][k]表示前i行,当前行为i状态并且还剩k个国王的方案数,从上往下递推即可。 P.S.希望下次不要再因为什么longlong之类的错失1A的良机qwq。。。 #include #include #include #include using namespace std;...
阅读(20) 评论(0)

bzoj 3224(非旋转treap)

传送门 附上两篇讲解: http://www.cnblogs.com/nietzsche-oier/p/6748292.html http://blog.csdn.net/zmh964685331/article/details/50536410 P.S.非旋转treap比普通treap慢,比splay快,可以实现splay能实现的而其余平衡树无法实现的操作比如区间翻转。#include<c...
阅读(9) 评论(0)

hdu 3401(单调队列优化dp)

传送门 题解: 构造状态dp[i][j]表示第i 天拥有 j只股票的时候,赚了多少钱 从前一天不买不卖 dp[i][j]=max(dp[i-1][j],dp[i][j]) 从前i-W-1天买进一些股 dp[i][j]=max(dp[i-W-1][k]-(j-k)*AP[i],dp[i][j]) 从i-W-1天卖掉一些股 dp[i][j]=max(dp[i-W-1][k]+(k-j)*BP[...
阅读(7) 评论(0)

NOIP集训Week 5总结

感觉本周过的特别快,上周这个时候干的事仿佛就在昨天。 本周完成的内容有:差分约束系统、各种二分图、无向图tarjan的几个应用(tarjan/点双/边双)(这里多嘴一句:本菜鸡有史以来第一次想到了神犇学长丁神没考虑到的算法细节就是关于tarjan的low函数)、欧拉路径相关问题、并查集的几个应用(带权并查集、按秩合并、增量最小生成树、次小生成树)、最小树形图、单调队列(优化dp)、主席树高级应用,...
阅读(29) 评论(0)

tvyj 1313(单调队列优化dp)

传送门 题解: 设dp[i]表示以1~i范围内(保证i处放一个烽火台)的最小代价。 dp[i]=min{dp[j]+w[i]}(i-j+1<=m) 用一个单调递增的队列维护dp数组,每次用队首更新答案,将元素插入队尾。#include #include #include #include using namespac...
阅读(15) 评论(0)

tyvj 1305(单调队列)

传送门 题意: 输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大。题解: 维护一个关于前缀和的单调递增的队列,每次用队首更新答案,将元素插入队尾。 P.S.单调队列都做不来的弱鸡。。。#include #include #include #include using namespac...
阅读(21) 评论(0)

hdu 3530(单调队列)

传送门 题解: 用一个单调不升的队列维护最大值,一个单调不减的队列维护最小值。如果不满足条件,后移答案区间左端点,取两个队列头指针的元素较小的一个(位置尽量靠前使区间尽量长)。#include #include #include #include using namespace std; const int MAXN=1...
阅读(37) 评论(0)

bzoj 4443(二分+二分图最大匹配)

传送门 题解: 二分答案x,对于权值不大于x的点行列连边,跑二分图最大匹配,如果匹配数小于n-k+1(第k大即第n-k+1小),则left增大,否则right减小。最后分到的left+1一定是答案。 #include #include #include #include using namespace std; const int MAXN=254,INF=0x3f3f3f3f; int...
阅读(18) 评论(0)

Luogu 2679(dp)(NOIP 2015)

传送门 NOIP 2015 D2T2 题解: 定义dp[i][j][k]为a串前i个字符,b串前j个字符,分成k段的方案数(a[i]必须选)。 定义sum[i][j][k]为a串前i个字符,b串前j个字符,分成k段的方案数(a[i]可选可不选)。 直接来要爆空间,所以第一维采用滚动数组优化。 那么两个数组互相转移: dp[cur][j][k]=sum[cur^1][j-1][k-1]...
阅读(23) 评论(0)

bzoj 1202(差分约束)/(带权并查集)

传送门 如果看到题不知道要转前缀和就可以退竞晒了。。。 题解1: (差分约束我居然1A了啦啦啦~~~,虽然这是道大水题) s[b]-s[a-1]=c,一看就是差分约束的套路: s[a-1]≤s[b]-c,连边(b,a-1,-c) s[b]≤s[a-1]+c,连边(a-1,b,c) 将所有点push进队列用SPFA找负权环即可,找到为false,没有为true。#include<cstd...
阅读(38) 评论(0)

非旋转/可持久化treap(转自Sengxian's Blog)

非旋转 Treap 及可持久化 Treap Published on 2017-10-12 基本知识:普通堆,二叉搜索树,可持久化基本思想。 介绍 性质 Treap = Tree + Heap Treap 是一颗同时拥有二叉搜索树和堆性质的一颗二叉树 Treap 有两个关键字,在这里定义为: key\text{key}key:满足二叉搜索树性质,即中序遍历按...
阅读(43) 评论(0)

bzoj 1103(DFS序+树状数组)

传送门 题意: 两种操作: 1.修改某条边的边权(0/1) 2.询问某个点到1路径上的边权和题解: 在DFS序上差分+树状数组。#include #include #include #include using namespace std; const int MAXN=250004; int n,m; int h...
阅读(35) 评论(0)

hdu 1829(带权并查集)

传送门 题解:并查集维护0/1权值。#include #include #include #include using namespace std; const int MAXN=2004; int n,m; int fa[MAXN]; bool val[MAXN];inline int read() { int...
阅读(21) 评论(0)

hdu 3047(带权并查集)

传送门 昨天才考过一道差不多的,用离线+BFS预处理+裸并查集水掉了(^_^) 题意: 有n个人坐在zjnu体育馆里面,然后给出m个他们之间的距离, 代表B的座位比A多X.。然后求出这m个关系之间有多少个与之前的关系有冲突。 题解: 用带权并查集维护点到根距离,在merge操作时: P.S.注意每组数据初始化时dis也要清空!!! #include #include #i...
阅读(14) 评论(0)

bzoj 4668(并查集按秩合并)

传送门 题意: 两种操作,强制在线。 1.将u,v连边 2.询问u,v最早什么时候已经连通 题解: 每次连边就更新时间戳赋成每个点的点权,查询链上最大值,所以不能压缩路径(压了路径无法解决分叉的情况),为了保证复杂度,采用按秩合并(复杂度mlogm?)。 #include #include #include #include using namespace std; co...
阅读(22) 评论(0)

网络流建模汇总(转自Edelweiss)

最大流 《POJ 1149    PIGS》  【题目大意】 有 M 个猪圈,每个猪圈里初始时有若干头猪。一开始所有猪圈都是关闭的。依 次来了 N  个顾客,每个顾客分别会打开指定的几个猪圈,从中买若干头猪。每个顾客分别都有他能够买的数量的上限。每个顾客走后,他打开的那些猪圈中的 猪,都可以被任意地调换到其它开着的猪圈里,然后所有猪圈重新关上。问总共 最多能卖出多少头猪。(1 ...
阅读(88) 评论(0)
257条 共13页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:12450次
    • 积分:2590
    • 等级:
    • 排名:第14770名
    • 原创:253篇
    • 转载:4篇
    • 译文:0篇
    • 评论:5条
    文章分类
    文章存档
    最新评论