04 2018 档案

摘要:题目:https://www.luogu.org/problemnew/show/P3646 对于A>1,将答案各位全置1,然后从高位到低位改成0判断是否可行; 用f[i][j]数组代表前i个数分成j组是否可行,转移是枚举最后一段的左端点k,然后看看后面整个一段的和能否满足要求,如果前后都满足就表示 阅读全文
posted @ 2018-04-29 19:56 Zinn 阅读(179) 评论(0) 推荐(0)
摘要:题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1012 单调栈水题;用了一下lower_bound二分。 代码如下: 阅读全文
posted @ 2018-04-28 23:07 Zinn 阅读(185) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1151 经典的扫描线问题; 可以用线段树的每个点代表横向被矩形上下边分割开的每一格,这样将一个矩形的出现或消失化为线段树上的单点修改; 每个格子记录两个值:c(矩形存在情况),sum(对当前答案作出贡献的长度); 将y离散化作为建树的依据; 阅读全文
posted @ 2018-04-28 22:23 Zinn 阅读(194) 评论(0) 推荐(0)
摘要:题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2957 线段树维护原点到楼顶的斜率,可以知道答案就是从原点开始斜率递增的个数; 记录一个mx数组表示这一段上最大的斜率,二分,分类讨论,递归求解; 而且如果要取rs的长度,不是直接取tr[rs] 阅读全文
posted @ 2018-04-28 19:47 Zinn 阅读(180) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2828 这题可以倒序来做,因为越靠后的人实际上优先级越高; 用0和1表示这个位置上是否已经有人,0表示有,1表示没有,这样树状数组维护前缀和表示这个位置前面有多少个空位置; 每插入一个人,找到前面空位置恰好是他要求的个数的那个位置,就是他最 阅读全文
posted @ 2018-04-28 18:50 Zinn 阅读(171) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P3385 两种方法,dfs和bfs; 一开始写的dfs,要把dis数组初值赋成0,这样从一个连着负边的点开始搜; 在一个负环上,一定会有一个点,从它开始绕环走,dis值一直为负,根据这个找环; 但是数据太强了,过不了 阅读全文
posted @ 2018-04-27 00:09 Zinn 阅读(207) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P1522 懒于仔细分情况而直接像题解那样写floyd然后不明白最后一步max的含义了... 分开考虑怎么保证在一个内呢?如果新连边的min与原直径的max在三个连通块里怎么办? 代码如下: 阅读全文
posted @ 2018-04-26 18:57 Zinn 阅读(137) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2728 第一道01分数规划题!(其实也蛮简单的) 这题也可以用迭代做(但是不会),这里用了二分; 由于比较裸,不作过多说明了。 代码如下: 阅读全文
posted @ 2018-04-26 00:07 Zinn 阅读(142) 评论(0) 推荐(0)
摘要:题目:http://www.joyoi.cn/problem/tyvj-1940 基环树的样子,看了书上的讲解,准备写树上DP,然后挂了: #include<iostream> #include<cstdio> #include<cstring> using namespace std; int c 阅读全文
posted @ 2018-04-25 23:40 Zinn 阅读(170) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=3417 根据一条边被几个环覆盖来判断能不能删、有几种情况等; 用树上差分,终点 s++,LCA s-=2,统计时计算子树s值的和即可; 用ST表做LCA,不知为何WA了: #include<iostream> #include<cstdio 阅读全文
posted @ 2018-04-24 19:05 Zinn 阅读(176) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P1462 最大值最小问题,二分答案。 代码如下: 阅读全文
posted @ 2018-04-23 23:13 Zinn 阅读(155) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P1073 由于任何城市都可以多次经过,所以可以随便走,也就不用太在意有向边和无向边,把无向边当做两条有向边处理; 根据题意,价格较小的城市要先于价格较大的城市被经过,然而它又可以随便走,所以不妨分开考虑; 每个点维护 阅读全文
posted @ 2018-04-23 22:42 Zinn 阅读(151) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P1119 N很小,考虑用Floyd; 因为t已经排好序,所以逐个加点,Floyd更新即可; 这也给我们一个启发,如果t不是排好序的,也可以离线处理,排序再做。 代码如下: 阅读全文
posted @ 2018-04-23 22:35 Zinn 阅读(145) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P1967 就是倍增LCA的裸题,注意一些细节即可。 代码如下: 阅读全文
posted @ 2018-04-20 00:26 Zinn 阅读(142) 评论(0) 推荐(0)
摘要:题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2730 首先一遍tarjan找出割点,将图缩点,这些大点中如果有只包含一个割点的,那么如果这个割点被去掉,则这个大点与图不连通,所以这个大点内必须有一个出口; 而如果没有割点,需要建两个出口,以 阅读全文
posted @ 2018-04-19 22:27 Zinn 阅读(162) 评论(0) 推荐(0)
摘要:题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2330 差分约束,再建立一个源点0,向所有点连边权为1的边,表示每个人都会分到糖果; 答案较大,需要开long long; 据说有个大数据会T,所以需要0点从n向1连边; WA了数次,竟然是没看 阅读全文
posted @ 2018-04-18 23:54 Zinn 阅读(138) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1275 做的第一道差分约束题... 首先,根据题意得出一些不等关系(f为前缀和雇佣人数): 0 <= f[i] - f[i-1] <= t[i]; // 雇佣的人数少于申请者但不能为负数f[i] - f[i-8] >= r[i] // 当x 阅读全文
posted @ 2018-04-18 00:22 Zinn 阅读(140) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=3565 首先,我们神奇地发现,没有相交边的匹配可以转化为距离和最小的匹配,所以可以使用KM算法求带权匹配; 要求的是距离和最小,所以把边权转化成负值来求最大; KM算法有点难理解,看了许多博客,总算朦胧懂了: 首先,每个点有一个“顶标”,用 阅读全文
posted @ 2018-04-17 23:26 Zinn 阅读(181) 评论(0) 推荐(0)
摘要:题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2750 以每个点作为源点,spfa跑出一个最短路图(不一定是树,因为可能很多条最短路一样长); 对于图中的每条边,需要知道从源点到边起点的方案数和边终点的size; 所以对于每张图都dfs求一遍 阅读全文
posted @ 2018-04-17 19:03 Zinn 阅读(139) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1236 通过传输文件的特点可以看出要先求强联通分量,缩点; 问题1:即缩点后入度为0的点,从它们开始传文件可以传给所有学校; 问题2:对于所有入度为0、出度为0的点,对应连一条边;多余的随便再连一下就可以,所以答案是max(入度为0点数,出 阅读全文
posted @ 2018-04-17 18:12 Zinn 阅读(143) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2226 把行连通块作为左部点,列连通块作为右部点,行列连通块有相交的格子就连边; 则问题转化为求最小点覆盖,即最大匹配。 代码如下: 阅读全文
posted @ 2018-04-17 17:44 Zinn 阅读(154) 评论(0) 推荐(0)
摘要:题目:http://www.joyoi.cn/problem/tyvj-1391 大意就是把一个树扩充成一个完全图,并且图中最小生成树仍是原来的树。 思路很巧妙,把边按权值从小到大排序,然后模拟加边的过程,并查集记录左右两边连通块的大小; 这样每新加一条边合并两个并查集(完全图),可知此时两边的图中 阅读全文
posted @ 2018-04-16 22:36 Zinn 阅读(159) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P4013 最大费用最大流裸题; 注意:在第二种情况中,底层所有点连向汇点的边容量应该为inf,因为可以有多条路径结束在同一个点。(为这个调了半天...) 代码如下: 阅读全文
posted @ 2018-04-12 01:02 Zinn 阅读(195) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P4009 网络流24题中不是网络流的最短路题; 把每个点拆成各个油量上的点,根据要求连边即可; 注意:点数最大为100*100*11,因为虽然k<=10,但还有k=0的状态!(竟然因为边界调了一晚上) 代码如下: 阅读全文
posted @ 2018-04-12 00:05 Zinn 阅读(266) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=3613 题意就是求从起点到终点的一条恰好经过k条边的最短路; floyd+矩阵快速幂,矩阵中的第i行第j列表示从i到j的最短路,矩阵本身代表一个边数状态; 所以矩阵相乘就是floyd算法,两个矩阵相乘就得到它们所代表的边数相加边数的状态矩阵 阅读全文
posted @ 2018-04-11 22:29 Zinn 阅读(233) 评论(0) 推荐(0)
摘要:题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1799 数位DP。 1、循环方法 预处理出每个位数上,和为某个数,模某个数余某个数的所有情况; 因为开四维会爆空间,所以省去模数,为此需要固定模数一次一次累加; 余数的转移,以及可以填数的范围都 阅读全文
posted @ 2018-04-11 00:10 Zinn 阅读(206) 评论(0) 推荐(0)
摘要:悬线法裸题。 代码如下: 阅读全文
posted @ 2018-04-10 18:42 Zinn 阅读(183) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P4014 最大/小费用最大流裸题。 代码如下: 阅读全文
posted @ 2018-04-10 18:37 Zinn 阅读(209) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1639 对根的度数有限制的最小生成树; 先忽略根,跑最小生成树,得到几个连通块,再一一与根连上; 然后在限制内用根连出去的边来使生成树更小,这需要枚举边以及用dp维护树上边的dfs序之前最大的一个; 此题用邻接矩阵比较方便。 改了一晚上,终 阅读全文
posted @ 2018-04-10 01:00 Zinn 阅读(212) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P4145 区间开平方,可以发现其实开几次就变成1,不需要开了,所以标记一下,每次只去开需要开的地方; 原来写的并查集跳过1或0,然而WA...其实是没有记录原数组的值,因为树状数组存的是修改量; (如果a数组<原数组 阅读全文
posted @ 2018-04-09 13:35 Zinn 阅读(220) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P4092 利用并查集,倒序离线,那么从倒序来看被撤销标记的点就再也不会被标记,所以用并查集跳过; 莫名其妙的WA,调了一晚上,好像是dfs的地方有问题,莫名其妙的;注释掉的是WA的,现有的可以A,不知怎的。 代码如下 阅读全文
posted @ 2018-04-08 23:33 Zinn 阅读(159) 评论(0) 推荐(0)
摘要:题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4247 就是01背包; 把挂钩数限制在n以内,因为不需要更多,而这会带来一些问题,就是有很多挂钩的物品按原来的方法就不能挂了; 但其实我们已经忽略了过多的挂钩,所以不能严格按实际的挂钩数量来遍历 阅读全文
posted @ 2018-04-05 20:19 Zinn 阅读(192) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P1115 很简明的一道题; 这里用了递归分治,然而似乎还有更简单的做法(贪心)。 代码如下: 贪心(转): #include<bits/stdc++.h> using namespace std; int main( 阅读全文
posted @ 2018-04-05 18:24 Zinn 阅读(162) 评论(0) 推荐(0)
摘要:题目:https://www.luogu.org/problemnew/show/P3373 带乘的线段树,更新时把加的标记也乘一下,然后取值时先乘后加。 代码如下: 阅读全文
posted @ 2018-04-05 17:22 Zinn 阅读(126) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2777 状压每个颜色的选择情况,取答案时 | 一番; 注意题目中的区间端点可能大小相反,在读入时换一下位置; 注意pushdown()中要lazy标签不为0才进行更新。 代码如下: 阅读全文
posted @ 2018-04-05 10:18 Zinn 阅读(127) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1734 无向图求最小环,用floyd; 在每个k点更新f[i][j]之前,以k点作为直接连到i,j组成一个环的点,这样找一下最小环; 注意必须存直接相连的边,在找环时k点连到i,j的值不能是最短路。 调了一个小时发现把z打成y了...... 阅读全文
posted @ 2018-04-03 23:52 Zinn 阅读(162) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1094 看到此题,首先觉得这是一种层层递进的关系,所以可以想到用拓扑排序; 就像人工排序,每次需要找到一个最小的,再找到新的最小的……所以用有向边代表小的元素到大的元素的关系,每次的入度为0的点就是最小的; 出现错误也就是出现了环,可以看做 阅读全文
posted @ 2018-04-02 23:03 Zinn 阅读(142) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=3662 二分答案找出符合条件的最小长度; 假设了每个长度后,以这个为标准对每条边赋值,0为小于等于,1为大于,然后按这个值来跑最短路,在看看能否使用不超过k根长电线; 注意不能到达要输出-1! 不知为何l从0开始就A了,从最短的电线开始就是 阅读全文
posted @ 2018-04-02 22:39 Zinn 阅读(145) 评论(0) 推荐(0)