- 博客(157)
- 收藏
- 关注
转载 【bzoj2654】tree(二分+MST)
好神奇的一道题我们发现给白边加上权值后 跑MST后 选到的白边就越少然后就二分这个加上的权值不过边界好像有点恶心?不过没关系 思想最重要#include<bits/stdc++.h>#define N 50005#define M 100005using namespace std;struct Edge{ int from,to,color,val...
2018-10-25 11:26:00
156
转载 【POI 2008】【bzoj 1113】海报PLA(单调栈)
好久没用过单调栈了 练练手最多贴n块海报我们发现能省海报的情况 当且仅当有两个矩形 他们高度一样 而中间夹着的矩形都比且他们高维护高的单调栈 每加入一个矩形 判断它左边第一个小于等于它高度的矩形的高度是否等于它的高度#include<bits/stdc++.h>using namespace std;template<class T>inline v...
2018-10-25 10:14:00
182
转载 【ZJOI2006】【BZOJ1003】物流运输(spfa+区间dp)
好题一开始想状压 但是转移根本无从下手设f[i][j]表示i~j天的最低成本 可以想到从第i天到第j天要么不换方案,要么从第k天换一种方案,类似于floyd求最短路就是 f[i][j]=min(f[i][j],f[i][p]+f[p+1][j]+k) 这是个区间dp然后我们发现 对于题目中有些”不可用“的点 只需在跑spfa的时候特判一下就阔以了然后spfa预处理出f数组#i...
2018-10-25 09:39:00
150
转载 【JSOI2010】【BZOJ1821】部落划分(二分+并查集)
显然最近的两个部落的距离是有单调性的 因此可以二分考虑check 我们遍历所有点 先把<=limit的点连起来 这样是肯定可以划分在一个部落里的 再用并查集维护一下然后扫一遍 如果father[i]=i 说明就有一个部落注意double#include<bits/stdc++.h>#define N 1005#define eps 1e-6using na...
2018-10-25 08:12:00
111
转载 【CF992D】Nastya and a Game(思维好题)
子序列肯定不可能是无限长的由于amax=1e8 nmax=2e5 kmax=1e5则summax=1e82e51e5=2e18 而longlong刚好能hold住那也就是说一个子序列里面非1的个数不超过64个(longlong范围是2^64)那我们可以把连续的1缩成一坨 然后枚举每个点 暴力地往后找具体的实现:记le[i]记录每个数左边第一个不是1的数在哪儿 然后用类似链表的方...
2018-10-24 22:06:00
204
转载 【NOIP 校内模拟】小C的序列(玄学链表)
我们固定左端点 每当右边加入一个数 那么gcd肯定在原来的基础上丢掉某几个质因数由于一个数最多有log个质因子 所以对于一个l gcd(l,r)不同的区间最多有log个于是我们枚举左端点 二分寻找右端点 用线段树/st表查询一个区间里的gcd 再用哈希表更新但是只能拿80分区间是可合并的 用链表来维护每个数的下一个不同的分界点 然后每次加 后合并相同的区间#include<...
2018-10-24 17:43:00
166
转载 【NOIP 校内模拟】T1 小C的数组(二分+dp)
我们发现直接做dp是不行的 有后效性又发现T是满足单调性的想到二分 考虑check先来想想如何确定一个区间内的数经过修改能否满足limit我们肯定是要把这个区间内的数两两的差改的尽量递增地平均才行写出式子就是(a[j]-a[i])/(j-1)<=limit设dp[i]表示 当前点是i(i不修改) 之后的满足要求的需要修改最小次数然后对于当前i 枚举之后的不改的位置 ...
2018-10-24 16:37:00
105
转载 【ZJOI2005】午餐(贪心辅助dp)
容易想到贪心:吃饭慢的先打饭节约时间, 所以先将人按吃饭时间从大到小排序。是可以证明无论怎么交换,都没有这样选优的。在这里由于我太菜了,就不写证明了我们设dp[i][j]表示前i个人 在1号窗口打饭总时间为j 最早吃饭完的时间 那也就顺便可以推出在二号窗口的打饭总时间了影响到当前dp[i][j]的:1~i-1最早吃完饭的时间和第i个人打完饭+吃饭的时间 很显然 如果前者比后者都还要...
2018-10-23 23:36:00
117
转载 【NOIP校内模拟】“新”的家园(思维题 建图最短路)
好题同样的 我们考虑把环展开成链来想我们引入一个概念:关键点 即 环外边的起点终点对于u,v两点 u,v的最短路,必定是 环外边+环上连续一段...这样的几个组合拼成的其次我们发现 “环上连续一段” 是很费时间的 极大地拖慢了我们spfa的效率 那么我们似乎只需要对于相邻两个关键点连一条权值为原来环上距离的边就快的多了那么建好图后 再仔细考虑如何处理询问u v他们有可能不是关...
2018-10-23 21:47:00
130
转载 【NOIP 校内模拟】行星通道计划(二维树状数组)
两个管道相交是啥情况?有环展链 我们把环展成链过后 发现只会出现如下图两种情况然后我们维护二维BIT1:表示左端点小于等于x 右端点小于等于y的个数BIT2:左端点大于等于x 右端点小于等于yBIT3:左端点大于等于x 右端点大于等于y查询就很简单了对于操作1相当于一个更新#include<bits/stdc++.h>#define N 1005#defi...
2018-10-23 16:43:00
124
转载 【NOIP 校内模拟】T1 战争(反向并查集)
我日哦 完全忘了前几天才做的星球大战(JSOI2008这道题还有花椒麻你 告诉你是一棵树 迷惑你是树上算法正难即反 考虑离线存下点 用并查集维护先把没有被破坏的点连起来 当两个联通块将要merge的时候 这时总贡献加了他们的权值和之积(根据乘法分配率可得简直和星球大战一模一样#include<bits/stdc++.h>#define ll long long#...
2018-10-23 15:46:00
180
转载 【洛谷10月月赛II】【T1】浏览器(结论题)
注意到x xor y 在二进制下1的个数是和x,y在二进制下1的个数有关更具体的来说:一奇一偶是满足要求的不加任何优化可以拿80分 O(nlogv)我们又发现过程中会出现比较多的重复的数因此可以记忆化一下拿到90分不过我们需要O(n)才能过所以需要一个O(1)求x在二进制下的个数的方法AC代码:(注意取膜的姿势)#include<bits/stdc++.h>...
2018-10-23 14:02:00
140
转载 【hdu 6183】Color it(线段树动态开点)
考虑到颜色只有50种所以我们开50棵线段树 然后对于每次询问 循环50次对于每一个颜色的线段树询问那如何查询啊你考虑到每次询问的最左边都是1也就是说只需要对于每种颜色的纵坐标 维护往右出现过的点的横坐标的最小值然后就是区间(y1,y2)查询最小值 判断是否超过了x但是会MLE啊所以动态开点 复杂度为nlogn#include<bits/stdc++.h>#d...
2018-10-22 22:47:00
150
转载 【HDU 5828】Rikka with Sequence(线段树维护区间开方,修改,求和)
首先我们知道一个数开7 8次方过后就歇逼了那我们是否可以维护一个区间的flag标记 表示是否一个区间里的数都是一样的 那开根就到这儿就行了(似乎在口胡?)然后我们看一组数据2 3 2 3 2 3然后整体加6然后开根号,又会变回2 3 2 3 2 3相当于不会出现区间数字一样的情况了,这样就相当于没剪枝,就T了然后发现只有极差为1的时候才会出现这种情况,极差>1的话是不可...
2018-10-22 21:03:00
178
转载 【LUOGU P1156】垃圾陷阱(背包变形)
首先应该看得出是一个背包吧那dp数组的第一维肯定有前i个物品那第二维放啥呢?血量?高度?时间?时间是完全可以排除的,因为牛肯定是在辣鸡刚掉下的时候就使用它,而且对于subtask1"如果卡门可以爬出陷阱,输出一个整数表示最早什么时候可以爬出",答案肯定刚好是某个辣鸡下落的时间血量呢?设dp[i][j]代表前i件物品处理后能苟到j时间(其实相当于j血量)达到的最大高度则有dp[i...
2018-10-21 23:18:00
134
转载 【LUOGU P1220】关路灯(区间dp)
一开始直接搜索+剪枝,拿了50分,发现原来是搜索搜复杂了..因为搜索是可以过的注意到题目中有一句''再回过头来关掉另一边的路灯,而事实并非如此,因为在关的过程中适当地调头有可能会更省一些",也就是说老王是在沿着某个方向走着走着突然转向,而不是毫无逻辑的,我之前写的搜索枚举就是毫无逻辑的for(int i=1;i<=n;i++) { if(vis[i]) ...
2018-10-21 16:24:00
153
转载 【NOIP 2007】矩阵取数游戏(区间DP)
一开始思路走偏 一直在想肯定与第几次取数有关 然后做了半天没做出来看了题解才恍然大悟 原来有个性质“可以每行分开来做 最后加起来就好了”那就变成了一个区间DP 我们设dp[i][j]表示从i到j闭区间的最大价值。(只考虑当前行)那么dp[i][j]肯定是从i的右边/j的左边转移来的 则有dp[st][ed] = max( dp[st][ed-1] + num[ed] * 2^(m-...
2018-10-21 11:20:00
185
转载 将博客搬至CSDN
没错我搬家了转载于:https://www.cnblogs.com/Patrickpwq/articles/9823514.html
2018-10-20 23:42:00
62
转载 【LUOGU P1373】小a和uim之大逃离(递推dp)
传送门QWQdp[i][j][h][l] 表示在点 (i,j),差值为h,小A还是uim取液体的方案数(0:小A 1:uim)转移方程:dp[i][j][h][1]+=(dp[i-1][j][(h-a[i][j]+k)%k][0])dp[i][j][h][1]+=(dp[i][j-1][(h-a[i][j]+k)%k][0]dp[i][j][h][0]+=(dp[i-1][j]...
2018-10-19 21:40:00
145
转载 【BZOJ 4973】比特战争(kruskal思想)
对于不属于一个联通块的x,y,现在想要联通他们则ans[y]=min(ans[x]+ans[y],max(edge[i].val,max(maxa[x],maxa[y]))*min(minb[x],minb[y]));前一种情况指他们俩各自占领各自的 后一种指一起占领 那么a[i]肯定取max,因为要覆盖所有,b取min,选择一个最小的城市降落。那为什么在最小生成树上呢?很简单,...
2018-10-19 17:06:00
191
转载 【BZOJ4917】Hash Killer IV(简单数论)
对于左移加:其实就是解方程由于i已确定 可以预处理出逆元对于右移异或 可以直接模拟 因为前面一坨不会变#include<bits/stdc++.h>#define uint unsigned intusing namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(NULL);...
2018-10-19 16:16:00
113
转载 【USACO08NOV】奶牛混合起来 Mixed Up Cows(状压+记忆化)
考虑到当前能否选择这头牛 是与上次选哪头牛有关的 因为要满足差值大于k所以记录一下last 表示选了哪一头牛然后记忆化一下有两个坑点1.注意取绝对值2.要枚举开头的那头牛 决不能直接dfs(0,0,0) 因为第一头牛与0的差值不一定大于k(或者初始化一下a[0]=-INF也阔以)这里提供纯暴力 和 记忆化两份代码暴力#include<bits/stdc++.h>...
2018-10-18 23:08:00
131
转载 【HDU 3308】LCIS(线段树合并)
维护一个区间的包含最左的元素的LCIS,包含最右元素的LCIS,以及整个区间的LCIS,然后pushup的时候就更新这三个值就行了。注意要考虑左右儿子可以“接”起来的情况等等查询的时候要注意,也要考虑左右可以“接”起来时候,不过还要注意,有可能左右儿子边界的已经“越界了”,就是超过了查询范围,还要取个min,这道题坑就坑在这儿#include<bits/stdc++.h>...
2018-10-18 20:43:00
147
转载 【HDU 1074】Doing Homework(状压+记忆化)
DFS策略:对于当前状态,枚举下一个选哪个(i),如果当前耗时已经超过i的死亡线,ans就累积然后可以记忆化当前状态标记为true 之后扫到这儿就return代码不是A的。。和几份题解都对拍了半天没找出问题 如果能指出错误的话请评论#include<bits/stdc++.h>#define N 17#define INF 0x3f3f3f3fusing name...
2018-10-18 16:37:00
139
转载 【HDU 1501】Zipper(记忆化搜索)
传送门我们记录pos1 pos2 pos3 分别代表现在字符串1,2,3的位置然后判断pos1是否等于pos3 或者pos2是否等于pos3 分别进行dfs然后我们发现是可以记忆化的比方当pos1=pos3且pos2=pos3 那会先搜索pos1+1 那么在这一次的dfs 有可能就提前处理出之后会选择的方式 那么当回溯之后 就会再去走这样的方式 浪费了很多时间所以只需标记一下v...
2018-10-18 14:45:00
199
转载 【BZOJ2588】Count on a tree(主席树+树上差分)
我们直接在dfs的时候顺便建主席树 维护一个节点到根路径上的节点出现情况对于查询(u,v)用u点的主席树+v点的主席树-lca(u,v)的主席树-lca(u,v)父节点的主席树,在这样产生的主席树上查找第k小的排名,最后输出它原来的点权。lca我选择了树链剖分#include<bits/stdc++.h>#define N 100005using namespac...
2018-10-18 14:03:00
135
转载 【IOI 1999】花店橱窗布置(记忆化搜索)
先打一个最裸的暴力再优化10分代码// luogu-judger-enable-o2#include<bits/stdc++.h>#define N 105using namespace std;int n,m,a[N][N],true_ans,choose[N]; //n束花 m个瓶子 vector <int> q;void dfs(int no...
2018-10-18 11:08:00
177
转载 【POJ 3348】Cows(Andrew求凸包法)
https://blog.csdn.net/linkfqy/article/details/72861176#include<iostream>#include<cmath>#include<algorithm>#define N 10005#define eps 1e-6using namespace std;int n;struct...
2018-10-18 10:01:00
81
转载 【洛谷P1278】单词游戏(DFS玄学剪枝/状压dp)
解法1 玄学剪枝最暴力的dfs是很好打的 交上去有70考虑如何剪枝1.当一个单词首尾和另外一个单词相同时,优先选择最长的那个,其他的不用选。这一点很好实现,给原数组排个序,dfs的时候写个while特判一下就好2.卡时自杀式剪枝你懂我意思吧以上两个剪枝随便加一个都可以过。。。解法2 状压dpn<=16 应该要先存下所有单词选与不选的情况考虑到只和一个单词的开头...
2018-10-17 23:09:00
220
转载 【USACO08DEC】在农场万圣节Trick or Treat on the Farm(缩点+记忆化搜索)
其实就是一张图 可知每个点出度为一由于有环 所以把整个图缩点后会好做得多在缩点后 每个强联通分量的出度至多为一。然后我们dfs 直接搜很危险 考虑记忆化 设ans[i]代表第i个强连通分量的答案就好了详见代码// luogu-judger-enable-o2#include<bits/stdc++.h>#define N 100005using namespa...
2018-10-17 21:34:00
98
转载 【NOIP模拟】T2 管道(状压dp求图的dfs序方案数)
f[i][j]: i表示整个图走没走过的状态 j表示当前到了第j个点 存的值就是在这种情形下 可以走到的地方的状态dp[i][j]:i表示整个图走没走过的状态 j表示当前在j点 访问剩余能去到的点的方案数因此只需要跑一遍DFS就好了#include<bits/stdc++.h>#define int long long#define mod 998244353 #...
2018-10-17 17:53:00
224
转载 【NOIP模拟】T1 发电机(递推逆元+期望)
期望是有线性性质的考虑每个点的概率由于一个点的子树放了后 它就不能再放了换句话说 这个点是子树中第一个通电的也就是说这个点的通电概率是\(\frac{1}{size[i]}\)题目中又说了每个点的编号大于儿子们 于是就不用dfs了 只需递推即可 把所有点的概率相加那还要求出逆元 这里提供一种逆元的线性递推方式#include<bits/stdc++.h>#d...
2018-10-17 16:13:00
131
转载 【NOIP 2017】宝藏(状压dp)
用dp[i]来表示状态i下的最优方案,dis[j]表示j到根节点的距离(题目中所描述的K)用dfs来更新答案#include<bits/stdc++.h>#include<cstdio>#define INF 2139062143#define N 12#define M 1005using namespace std;int g[N][N],n,m...
2018-10-17 13:07:00
162
转载 【POI2014】KUR-Couriers(主席树)
对于询问[i,j]在[1..n]中我们看看小于mid的数字有多少个,显然如果个数的两倍<=j-i+1那么[1..mid]中就不存在这样的数,反之检测大于mid有多少个当然 如果两个都不行,就返回0是可以递归的#include<bits/stdc++.h>#define N 500005using namespace std;int n,m,a[N],rt...
2018-10-16 23:46:00
126
转载 【CQOI2015】任务查询系统(主席树+差分)
这是一道好题 可以更深的理解主席树最初的想法是 一开始 一边加入任务 一边维护时间轴换句话说 对于每个时间点 我们都想维护一颗权值线段树(这里的权值代表着优先级Pi)相当于对于一个任务 我们要维护Ei-Si棵然而显然MLE 考虑降维联想到主席树建树方式是通过前缀和来的既然是求前缀和 这道题的每个任务相当于区间修改 会不会与差分数组有关呢?答案是正确的所以一开始我们想维护的E...
2018-10-16 22:24:00
111
转载 【洛谷P3834】【模板】可持久化线段树 1(主席树)
几个月没打了...全忘光记得之前写过一篇主席树入门教程 https://blog.csdn.net/Patrickpwq/article/details/80315358显然里面的代码丑的不能看重发一个代码主席树推荐不要写结构体// luogu-judger-enable-o2#include<bits/stdc++.h>#define N 200005usi...
2018-10-16 20:38:00
64
转载 【NOIP校内模拟】T3 长者(主席树+哈希+二分)
我们先考虑如何比较两两的字符串我们可以用线段树来维护哈希值 在线段树上根据二分的性质来做即可又考虑到 每颗线段树是在之前的某颗基础上只修改了一个节点 那显然就想到了主席树另外说说如何pushup 我们考虑这样一个字符串 abcdefg假设当前节点左儿子是abc 右儿子是defg由于我们的哈希值用的是unsigned long long 自然溢出大法 也就是说abc的哈希值是a(...
2018-10-16 17:32:00
154
转载 【NOIP校内模拟】T2 华莱士(环套树)
其实就是要求最小的环套树森林我们现在只考虑如何合并 设当前边的两个端点是x,y若x,y在一个联通块里那这个联通块要么是树 要么是环套树假如是个环套树 加一条边后必定变成两个环 不符合要求假如是个树 加一条边就变成了换套树 符合要求若x,y不在一个联通块里假如同为环套树 加一条边后必定变成两个环 不符合要求假如同为树 加一条边后还是树 符合要求假如一棵树 一棵环套树 加了...
2018-10-16 16:15:00
133
转载 【NOIP校内模拟】T1 膜法(组合数)
整理题意后 对于每个询问其实就是由于C(m,n)=C(m,m-n)就变成了其实就是在杨辉三角上的一列求其中的一段和然后有个玄学的公式什么意思呢证明是很容易得到的所以把阶乘预处理出来 由于1e9+7是质数 可以用费马小定理算逆元 就可以O(1)回答#include<bits/stdc++.h>#define N 100010#define mod 1...
2018-10-16 15:26:00
111
转载 【POJ 1269】Intersectiong Lines(两条直线关系)
思路:我们先判断这两条直线是否平行 若平行 再去判断是否重合 若不平行 算交点具体实现:对于平行 我们直接判断v1,v2的叉积(v1,v2是来表示L1,L2的向量)是否为0对于重合 我们把l1上的端点p1代入l2 判断叉积如图 只需判断v1,v2的叉积是否为0 ,可以画个重合的图自行理解对于算交点 暴力用一次函数的方法解方程 不过除数有可能为0 需要特判垂直于x轴的线...
2018-10-15 23:06:00
176
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅