cdq
wzf_2000
这个作者很懒,什么都没留下…
展开
-
【BZOJ2001】[Hnoi2010]City 城市建设
题意应该蛮简单的:修改边权,每次修改后询问MST边权和。 思路:cdq分治+Kruskal 每次将(l,r)修改的边权改为inf,删去没有在MST中的边。 改为-inf,将在MST中且边权不为-inf的边连接的点缩点。(并查集) l==r做kruskal。 这样做可以使边数,点数降到o(r-l+1)级别。 时间复杂度o(nlogn^2) #include #define gc ge原创 2017-08-04 08:37:35 · 504 阅读 · 0 评论 -
【bzoj1492】[NOI2007]货币兑换Cash
此题非常的经典(似乎cdq分治就是从这题引出的) 基础思想就是cdq分治优化dp。 网上题解似乎很多。。 所以dp什么的就不写了。 重点就是通过cdq来满足斜率优化的条件(维护凸包) #include #define gc getchar() #define N 100009 #define mid (l+r>>1) #define eps 1e-7 #define inf 1e10原创 2017-08-04 08:42:42 · 266 阅读 · 0 评论 -
【bzoj2149】拆迁队
似乎又是一道cdq维护dp 这题首先要按照d[i]=a[i]-i的值分层dp。 在cdq分治中,相当于前一层dp为修改,当前层为询问。 考虑如何维护[l,mid]的修改对于[mid+1,r]的询问的影响。 列出dp方程发现只要寻找最小值即可。 然后就在维护的凸包上三分最小值的位置就好。 #include #define gc getchar() #define N 120009 #d原创 2017-08-04 08:48:40 · 423 阅读 · 0 评论 -
【bzoj2244】[SDOI2011]拦截导弹
这题就是个三维偏序。 三维偏序就是排序一维,cdq一维,数据结构一维。 然后尴尬的是还要求概率。 也就是方案数。 cdq正反各一遍,求三维偏序时,顺便dp记录方案数就好。 #include #define gc getchar() #define N 50009 #define mid (l+r>>1) #define ll long long using namespace std;原创 2017-08-04 08:52:01 · 367 阅读 · 0 评论 -
【bzoj2726】[SDOI2012]任务安排
首先暴力dp应该是很简单的 dp[i]=min(dp[j]+cost[i]*(T[i]-T[j]+S)) (j>i) 本来简单的斜率优化因为脑洞大的出题人一句时间可以是负的变成了cdq维护dp 但比较好的一点是可以先把所有决策点加入凸包,在枚举询问(按斜率排序(T[pos]))在凸包上跑答案。 #include #define gc getchar() #define N 50000原创 2017-08-04 08:57:01 · 482 阅读 · 0 评论 -
【Codeforces813F】Bipartite Checking
cdq分治维护并查集。 并查集时,只要按秩合并,不要路径压缩,方便还原。 (好吧,还不是看po姐博客的)#include <bits/stdc++.h> #define gc getchar() #define ll long long #define mid (l+r>>1) #define N 400009 using namespace std; int n,m,sta[N],top; s原创 2017-10-26 14:23:38 · 553 阅读 · 1 评论