自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Pengwill's Blog

一百年太短,只争朝夕

  • 博客(501)
  • 资源 (2)
  • 收藏
  • 关注

原创 BZOJ1012 [JSOI2008]最大数maxnumber(线段树)

题意分析可以用线段树搞一搞 单调栈和单调队列是正解吧,还是要学一下的。线段树直接维护区间最值就好了,别的没什么技术含量了。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 200001;const int INF = 0x3f3f3f3f;typedef long long ll...

2018-04-28 15:14:07 126

原创 Vijos1659 河蟹王国 (线段树 区间更新 区间最值)

题意分析很裸的一道题目注意更新的时候对应的节点的mx也要更新。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 100001;const int INF = 0x3f3f3f3f;typedef long long ll;typedef struct{ int l, ...

2018-04-28 14:41:12 135

原创 Vijos1083 小白逛公园 (线段树 区间连续和最大值)

题意分析求一段区间子序列和的最大值,要求在线,操作有:单点值修改区间查询子序列和最大值如何解决呢 维护四个东西,左边连续最大值,右边连续最大值,区间连续最大值,区间和。更新操作左边连续最大值,取【左区间左连续最大值,左区间和+右区间左最大值,左区间和+右区间和】中最大值。右边连续最大值,取【右区间右连续最大值,右区间和+左区间右最大值,右区间和+左区间和】中最大值。...

2018-04-28 13:41:31 154

原创 HDU1540 Tunnel Warfare(线段树 连续区间长度)

题意分析操作: 1. 破坏某个点 2. 恢复某个点 3. 查询该点与相连的未被破坏的点的最长长度使用线段树维护最长连续区间和,具体方法如下。 首先我们先增加两个域,llen,rlen llen表示一个区间从最左端开始可用的且连续的最大长度 例如区间[1,5],覆盖情况为[0,0,0,1,1],llen = 3,从最左端有3格可以利用 区间[1,5],覆盖情况...

2018-04-27 21:16:20 147

原创 JoyOI1473 校门外的数3 (线段树)

题意分析题意很简单 一开始想用一个bitset维护,明显这个是超内存的。但是我为什么还要写然后想了一下,能不能维护每次种树的左右区间来写,然而发现并不行。 接着想,维护种类和维护区间没办法了,能不能在种树的次数上下功夫呢?我想维护一个种了树和没种树的线段树,询问就是查询区间内中了树的最大值和没种树的最小值,最后做一个差,这样的话样例是过的。写完交上去WA了,自己想了一个样例吧自己叉...

2018-04-26 22:47:35 171

原创 Vijos1066 弱弱的战壕 (线段树)

题意分析# 待填坑 我这个线段树怎么跑的比暴力还慢呢! 应该是没写lazy的锅吧代码总览线段树#include<bits/stdc++.h>using namespace std;const int nmax = 50000;const int INF = 0x3f3f3f3f;typedef struct{ int l, r, v; ...

2018-04-24 13:30:49 244

原创 BZOJ1202 狡猾的商人 (Floyd)

题意分析看了一眼题意,发现FLOYD可以做,其实就是判断是否满足边相加的关系成立。 需要注意的是,有可能有这样的数据, 3 2 1 2 10 3 3 -15 这个也是true的,也就是说,当边不满足判断条件的时候,可以认为补充上一些边。 或者说,只有发现两边相加不等于第三边的时候,才算false。 这道题也可以用带权并查集来做。 一看数据范围才100当然用Floyd来做啦!...

2018-04-23 21:37:41 177

原创 Codevs1004 四子连棋(BFS+Hash)

题意分析BFS很好想,要考虑白色先手和黑色先手两种情况。 移动棋子可以理解为移动空白部分,搜索时要注意: 1. 空白部分不能出界 2. 空白部分不能重叠 3. 移动的棋子要和当前对应要移动的棋子相同判重的话,直接用hash就可以。 这个题hash冲突概率很低了,随便蛤蛤就可以了。代码总览#include<bits/stdc++.h>using names...

2018-04-23 21:03:38 233

原创 HihoCoder1398 网络流五·最大权闭合子图 (网络流)

题意分析如题 注意边数是约束条件,不是顶点的个数。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 10000;const int INF = 0x3f3f3f3f;typedef long long ll;typedef struct{ int to,nxt; l...

2018-04-23 13:21:13 172

原创 ACM-ICPC2018 宁夏丝绸之路网络赛 Clever King (网络流)

题意分析当时感觉就是网络流,然后学了如何建图,但是脑残+手残正反边都给建成INF了,凉凉。代码总览#include<bits/stdc++.h>using namespace std;typedef long long ll;const int nmax = 100000;const int INF = 0x3f3f3f3f;typedef struct {...

2018-04-23 09:35:03 732

原创 POJ2987 Firing (网络流)

题意分析最大权闭合和回路代码总览#include<cstdio>#include<bitset>#include<cstring>#include<queue>#include<algorithm>using namespace std;const int nmax = 60005;const int INF...

2018-04-23 09:23:16 169

原创 Codevs 4919 线段树练习4 (线段树)

题意分析emmmm WA了一天 我一直以为是区间修改写挂了,然后发现其实策略PUSHUP,PUSHDOWN写的不好。首先考虑,在建树的时候,叶子节点不必保存数值。 其次,在更新的时候,只需要更新更新数值模7的结果。 如果模7为0,则不必更新。 在更新的时候,只需要对保存模7余几的那个数组进行相应修改,别的不用管了。PUSHUP:将节点左右儿子的结果进行合并。 PUSHDOWN...

2018-04-20 21:22:13 228

原创 0-1分数规划

是什么0-1分数规划解决这样一类问题。给定一些元素,可以进行选取,选取有好处(b)和花费(c),最后求好处的和与花费的和的比例最大或最小。 用r来表示比例,x[i]x[i]x[i]来表示对应元素是否选择,取值为0,即为选择,取值为1即为不选择,那么问题就变成了: r=∑b[i]∗x[i]∑c[i]∗x[i]r=∑b[i]∗x[i]∑c[i]∗x[i]r = \frac{\sum{b[i] ...

2018-04-19 22:11:54 175

原创 BZOJ1050 [HAOI2006]旅行comf (并查集)

题意分析一开始想用最短路的方法维护,然后更新信息。失败了。 想了半天,发现跟lrj书上面的一道题很像,看边才5000,暴力可做。 对边排序后枚举sta,直到发现起点和重点在一个联通块里面,统计答案即可。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 5005;typedef struc...

2018-04-19 21:55:09 184

原创 Codevs 2645 Spore (SPFA)

题意分析裸地SPFA代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 1e5 + 10;typedef struct{ int to, nxt, w;} Edge;Edge e[nmax<<1];int head[nmax<<1];int di...

2018-04-19 19:40:14 185

原创 fastIO

更新一波板子namespace FastIO { const int SIZE = 1 << 16; char buf[SIZE], obuf[SIZE], str[60]; int bi = SIZE, bn = SIZE, opt; int read(char *s) { while (bn) { fo...

2018-04-17 23:00:06 356

原创 BZOJ1001 [BeiJing2006]狼抓兔子 (网络流)

题意分析一看就是一道网络流的题目,然后上去最大流直接搞。 然后发现超时了,所以学了一波当前弧优化,然后就过了。 然后我觉得还可以再快一点,就IO加速了一下, 发现速度提高了400ms。 嗯,FASTIO还是很强的。 还有这道题是无向图,所以正反边容量都是w,一开始我建成正边w反边0,过不了。原因是有向图和无向图还是不一样的,会影响到增广的情况。 另外因为是平面图,所以可以求出对偶图,...

2018-04-17 18:30:13 172

原创 Vijos1404 遭遇战 (SPFA)

题意分析看了一下题解区的dalao都是线段树+DP,然而蒟蒻看不懂。 用最短路思想直接解决这道题。把每个人的守卫时间转换为 a-1到 b。 由于最优解会有区间相交的情况,所以要将i 与 i-1 连接一条权值为0的边。 最后注意,题目中给了s和e,一开始我没注意,一直从0开始的,然后就凉了。代码总览#include<bits/stdc++.h>using ...

2018-04-16 20:43:31 534

原创 洛谷P1339 热浪 (SPFA)

题意分析SPFA裸题代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 6500;const int mmax = 2550;typedef struct{ int to,nxt,w;}Edge;Edge e[nmax<<2];int n,m,s,t,tot...

2018-04-16 20:39:47 346

原创 Vijos1754 最优贸易(SPFA)

题意分析反向建图的思想应该是很常见的。 一开始一直在想直接做一次SPFA求出结果,发现一直无法维护找到的最大最小值和能够更新的先后关系。后来看了一下题解才明白怎么回事。首先正向建图,因为一开始是没有购买水晶球的,首先应该找一个地方购买水晶球,按照贪心的思想,希望购买到的水晶球的价钱尽量低。这时候做SPFA,意义为找到从起点开始能到达的点,其能买到水晶球最便宜的价格为多少。 SPFA的过...

2018-04-16 20:38:45 252

原创 POJ1237 Drainage Ditches (网络流)

题意分析农夫John有N个池塘一次编号为1到N,在这些池塘之间有M条单向的水渠,每一条有一个最大的通水速度。每一个池子里有一个调节器,可以设定池子里的水分别通过哪些水渠流多少到别的池子。现在要求从编号为1的水池向编号为N的水池进行输水,最大的通水速度是多少。最大流 FF居然没有卡。代码总览#include<cstdio>#include<algorithm&...

2018-04-15 16:09:12 357

原创 JOYOI1728 普通平衡树(Splay)

题意分析Splay 模板题,理解了好半天,照猫画虎来一发。 我写的这个效率很低啊,跑了400ms。。。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 100000<<2;int ch[nmax][2], f[nmax], cnt[nmax], key[nmax], siz...

2018-04-15 15:56:30 190 2

原创 HDU 3549 FlowProblem(网络流)

题意分析小试牛刀 最大流的FF算法基本思路就是找増广路,存在增广路径即表明这条路径可以加入更多的流。 一直寻找,直到找不到増广路位置。 可想而知时间消耗不忍直视。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 50;int tt,kase = 1,n,m,s = 1,t,an...

2018-04-15 15:50:26 120

原创 洛谷P1078 文化之旅(SPFA)

题意分析看了题直接想SPFA了。 然后发现入了大坑。 朴素的SPFA遇到更短的结果,就直接松弛,但是本题限制有点多,考虑如下: 1. 如果下个国家的文化已经学习过,不可访问(更新) 2. 如果下个国家文化鄙视已经学习过的文化,不可访问(更新)。 实现上述限制条件不是很难。但是还要考虑另外一个问题,比如2-3国家是可以访问的并且已经访问过。但是进行spfa的时候,可能会对齐反向边3-...

2018-04-07 13:37:48 348

原创 Vijos1037 搭建双塔(DP)

题意分析暴力DP + bitset 优化代码总览#include<bits/stdc++.h>using namespace std;int n,s;int h[105];int main(){ scanf("%d",&n); for(int i = 1;i<=n;++i) scanf("%d",&h[i]),s+=h[i]...

2018-04-06 19:40:58 204

原创 Vijos1059 积木城堡(DP)

题意分析一开始我想到对于每个城堡,每块积木可以看做物品,但是思路局限n个城堡这里,没有找到突破口。 这题本质是一个01背包,但是思路十分的巧妙。 还是最初的想法,每块积木可以看做物品,那么我们就可以知道这个城堡中的积木可以得到的所有可能高度。 以此,就可以得到所有城堡可能的高度。最后找出所有可能高度中最高的那个即可。空间开销,每个城堡最高为100*100,共有100个城堡。其实可以每...

2018-04-06 16:09:17 1087

原创 Vijos1250 最勇敢的机器人(DP)

题意分析首先用并查集处理所有的分组,将不同分组放入不同vector中。 然后做分组背包即可,要注意分组背包的顺序for 所有分组 : 0 to g for 背包容量 : v to 0 // 必须逆序,如果写反,对于同一件物品可以无限装 for 分组物品 : 0 to item dp[j] = max(dp[j], dp[j - w[it...

2018-04-06 15:26:18 697

原创 Vijos1159 岳麓山上打水(迭代加深 + DP)

题意分析其实一开始写了一个假算法,看出来是完全背包了,就完全背包+记录路径,一直WA,后来看了题解才明白是迭代加深和DP。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 101;int a[nmax],ans[nmax];int dp[20001];int p,q,sum;boo...

2018-04-06 12:40:54 315

原创 Vijos1198 最佳课题选择(DP)

题意分析状态设计dp[i][j]表示前i个课题,分配j篇论文的最少时间状态转移dp[i][j] = min(dp[i][j], dp[i-1][k]+c[i][j-k]) 其中c[i][j-k]意为第i个课题,写j-k篇论文的时间代码总览#include<bits/stdc++.h>using namespace std;const int n...

2018-04-06 09:21:09 226

原创 Vijos1240 朴素的网游戏(DP)

题意分析首先要观察出题目的一个小性质,即如果有两对(或以上)夫妻住在一起的话,那么交换之后结果不会变差。因为首先这两个房间的容量至少为2,如果男男在一个房间,女女在一个房间此时花费不变,有一个房间容量大于2的时候,就还可以再入住其他人。这样结果变得更优了。 综上,要么至多存在1对夫妻住在一起,要么不存在夫妻住在一起。状态设计dp[0][i][j][k]表示没有夫妻住在一个房间,对...

2018-04-06 09:16:02 216 1

原创 POJ3259 Wormholes (BellmanFord)

题意分析给出图,图中有边权为正的双向边和边权为负的单向边,求到某一点的值能否为负。 利用BellmanFord判断负环即可。代码总览#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int nmax = 3000;const int ...

2018-03-28 22:50:38 175

原创 POJ1860 Currency Exchange (BellmanFord)

题意分析给出货币相互对换的汇率,求经过若干次对换之后,能否使得原来的货币变多。将每种货币看做成一个点,将对换看做是边,使用BellmanFord判断是否含有正环即可。 因为正环的含义就是,可以多次走这个环,使得每次对换后相应的货币变多。代码总览#include<cstdio>#include<cstring>#include<algori...

2018-03-28 22:46:14 238

原创 基环树动态规划

基环树DP基环树定义先回忆一下普通树结构有哪些特性: 1. N个点 N-1条边。 2. 没有父节点的节点称为根节点,除根节点外每个几点都有一个父节点。基环树可以理解为: 1. 有N个点N条边 2. 在原来一颗树的基础上,添加一条边,那么就是基环树了同理,在基环树上的环中,删掉一条边,那么就是一颗普通树了。 也正是利用这个特性,在基环树上进行动态规划。基环树如何进行DP...

2018-03-27 22:23:24 912

原创 洛谷P1352 没有上司的舞会(DP)

题意分析树形DP入门题目。 树形DP其实和普通的DP区别就在于转移的方式。 普通的DP的状态转移是在一张表上,表的坐标表示不同的状态。而树形DP由于其特殊性,即题目中描述的关系满足树形的结构,所以利用树形结构进行状态的转移。 由于是在树上进行状态转移,所以DFS是必不可少的。对于这道题来说,关系正好是一棵树,并且可以明确的是,如果选择了父节点,那么其子节点就不能选择;如果不选择其父节...

2018-03-27 21:58:55 203

原创 洛谷P1004 方格取数(DP)

题意分析和P1006 差不多。 区别就是如果取走了数字,要归0,而且可以走相同的格子。 状态的定义和传纸条是一样的 。直接n4n4n^4的循环,然后就OK了。 注意如果是转移到同一个地方,那么这一个方格子的值只能加一次。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 60...

2018-03-24 21:34:59 289

原创 洛谷P1006 传纸条 (DP)

题意分析一开始想的是进行两遍DP,这样明显是错误的,因为会有重复走的位置,这是不符合题意的。 然后看题解,很多写的是双线程DP,我不太感觉的出来。其实想一下,因为有两个人要描述这两个人的状态,那肯定是分别用他们在平面的坐标,这是最直接的。 dp[x1][y1][x2][y2]dp[x1][y1][x2][y2]dp[x1][y1][x2][y2] 表示A走到(x1,y1)(x1,y1)(x...

2018-03-24 21:23:43 456

原创 Vijos 1431 守望者的逃离(贪心+DP)

题意分析看到题DP状态还是十分好设计的。 dp[i][j]dp[i][j]dp[i][j] 表示当前时刻iii,剩余魔法jjj 所能逃离的最大距离。 状态转移方程为: dp[i][j]=max(dp[i−1][j−4],dp[i−1][j+10]+60,dp[i−1][j]+17)dp[i][j]=max(dp[i−1][j−4],dp[i−1][j+10]+60,dp[i−1][j]+...

2018-03-23 11:45:06 299

原创 RQNOJ273 马棚问题(DP)

题意分析状态设计dp[i][j]dp[i][j]dp[i][j] 表示对于前i个马棚, 装前j匹马的不愉快系数的最小值。状态转移方程dp[i][j]=min(dp[i][j],dp[i−1][k]+cost[k+1][j])dp[i][j]=min(dp[i][j],dp[i−1][k]+cost[k+1][j])dp[i][j] = min(dp[i][j], dp[i-1]...

2018-03-18 22:59:02 469

原创 RQNOJ28 愚蠢的宠物(LCA / 并查集)

题意分析其实是一道裸地最近公共祖先的题目,但是还是可以用并查集水过去。怎么水呢? 合并时记录一下深度,默认节点1深度为0。 最后要求两个节点的最近公共祖先,那么首先让深度大的那个节点总下往上找,最后一定是回到根节点1,在网上找的过程中,一边找一边记录一下经过哪些了节点,用bool数组保存。 然后让另外一个深度比较小的节点找根节点,如果在途中遇到了第一个节点经过到的节点,直接返回即可。...

2018-03-17 22:39:00 272

原创 RQNOJ 166 免费午餐 (最长递增子序列 nlogn)

题意分析要用nlogn的算法 ,否则会被卡死代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 100005;int a[nmax];int dp[nmax];int main(){ int n; while(scanf("%d",&n)!=EOF){ ...

2018-03-17 22:09:06 211

algebra_2005_2006.zip

algebra_2005_2006数据集,常作为知识追踪的使用数据。KDD Cup 2010: Educational Data Mining Challenge使用的数据集之一。

2020-04-11

Dynamic Graph Algorithms

Dynamic Graph Algorithms Methodology & State of the Art Algorithmic Techniques & Experimen Conclusions

2018-08-26

空空如也

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

TA关注的人

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