9.noip及时复习
秦始皇吃花椒
这个作者很懒,什么都没留下…
展开
-
codevs1080 树状数组模板题
题目 codevs1080 思路 一、树状数组 1.单点修改,区间查询: < O(logn)。 2.代码量小于线段树,但功能不如线段树多。 3.查询只支持1~i的和,所以求区间和要用前缀和的形式。 (具体树状数组的代码实现是固定的,看代码) 代码 #include <cstdio> #include <cstdlib> #include <...原创 2018-08-09 08:59:26 · 217 阅读 · 0 评论 -
【图论】单源最短路的三种算法
题目 例题可以用洛谷P3371和P4779 思路 1.dijstra 完美做出,但条件是不能有负权边,堆优化以后复杂度是O(mlogn)。 2.bellman-ford 主要用于有负权边的情况,理论复杂度是O(nm),但队列优化以后往往远小于这个复杂度。 3.floyd 多源最短路算法,这里也拿过来一块学了,复杂度是O(n3)O(n3)O(n^3),所以不应该用多元最短路算法flo...原创 2018-09-04 00:00:17 · 1051 阅读 · 0 评论 -
【最短路】洛谷P1144 最短路计数(注意过程取模问题)
题目 LP1144 思路 正常最短路,检测到可以松弛覆盖最短路个数,检测到路径相等最短路个数加上即可。 本题注意过程取模问题,程序过程中就要及时取模,不要到了输出的时候再,不然鬼知道会不会爆。 代码 #include <cstdio> #include <cstdlib> #include <cstring> #include <algor...原创 2018-09-06 18:30:34 · 274 阅读 · 0 评论 -
【最短路】SPFA模板:最短路和判断负环
题目 LP3371 LP3385 思路 对于判断负环,当从起点到当前结点经过结点数大于n-1,跳出即可。 代码 单源最短路 #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <iostream>...原创 2018-09-12 01:06:03 · 442 阅读 · 1 评论 -
【最短路】洛谷1119 灾后重建(floyd的DP本质分析)
题目 洛谷P1119 思路 暴力算法即每次询问情况做一次dijktra。 AC算法,本题考虑floyd的DP本质。 首先谈谈Floyed算法:Floyd算法的本质是动态规划,其转移方程 为:f[k][i][j] = min( f[k-1][i][j], f([k-1][i] [k])+f[k-1][k][j] )。 f[k][i][j]表示路径除开起点i与终点j,只经过前k...原创 2018-09-11 23:48:15 · 243 阅读 · 0 评论 -
[二分] 洛谷P1226 快速幂
题目 输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。 做法 快速幂讲解 代码 代码1:没有位运算 #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #def...原创 2018-08-06 13:08:31 · 235 阅读 · 0 评论 -
[二分] WYF快速幂魔改版
题目出处 qbxt夏北京二期,提高组精英版,WYF出题。 题目 给一个n个数的序列a,需要进行m次询问,每次询问需要计算a[a[a[x…]]]的值,其中括号有t对。 输入第一行有n,m,t三个数,第二行有n个数表示序列a,第三行有m个数分别表示每次询问。 输出m个数,分别表示每次询问所得值。 数据范围:n,m&lt;=100000,t&lt;=10^9。 思路 对于a[x],设b[...原创 2018-08-06 21:51:21 · 337 阅读 · 0 评论 -
[二分] 洛谷P1083 借教室 (二分答案+差分)
题目 LP1083 思路 二分答案 首先可以看出,最后答案ans存在明显的单调性,这个单调性是1或0的单调性,有点特殊,大概是这样的: 所以就可以二分答案,二分出来的答案应该满足这样的规律:对于ans个订单,教室够借。对于ans+1个订单,教室不够借。 这里给出二分的模板:(来自WYF) 所有的二分都应该是下面两种的一个,不能出现类似于这样的二分: mid = (l+r...原创 2018-08-07 18:36:33 · 563 阅读 · 0 评论 -
[堆] 洛谷P3378 二叉堆模板
题目 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 二叉堆 支持两种操作 1.往一个集合加一个数。 2.从集合中删去一个优先值最大的元素。 规则 每个结点比儿子优先级大。 插入规则:先插入到最后一个结点,然后不停与父节点交换,直到到了根节点或者比父...原创 2018-08-08 11:17:44 · 365 阅读 · 0 评论 -
[二叉堆] 洛谷P1090 合并果子
题目 LP1090 思路 本题需要画一下图 可以观察到: 每个果子的代价:重量*在树中深度 考虑如果构造一个深度越深的结点权值越小,就能达到最小权值。那么本题的做法就变成了每次选最小的两堆果子合并。这个可以用二叉堆来做。 代码 #include <cstdio> #include <cstdlib> #include <cmath> #...原创 2018-08-08 19:02:28 · 257 阅读 · 0 评论 -
[并查集] codevs1073 家族(并查集的一般写法和两种优化)
题目 codevs1073 思路 即给一个无向图,判断两个结点是否连通。 并查集 路径优化的内容上面讲了,对于另一个优化:按秩合并: 在合并两个子树的时候,分别设两个子树的结点个数为tot[i],tot[j]。若tot[i]>tot[j],那么理想的方法是把j子树接到i子树上,原因是,这样做只会有tot[j]个结点的深度加一,而另外一种接法需要有tot[i]个结点的深度加一。...原创 2018-08-08 19:58:07 · 233 阅读 · 0 评论 -
【多源最短路】 UVa247 电话圈 (求传递闭包)
题目 如果两个人互相打电话(直接或间接),则说他们在同一个电话圈里。例如,a打给b,b打给c,c打给d,d打给a,则这四个人在同一个电话圈里;如果e打给f但f不打给e,则不能推出e和f在同一个电话圈里。输入n(n≤25)个人的m次电话,找出所有的电话圈。人名只包含字母,不超过25个字符,且不重复。 思路 传统的最短路中,d[i][j]表示i到j的最短路。本题只要将d[i][j]改成i到j...原创 2018-09-04 23:58:52 · 196 阅读 · 0 评论 -
【最短路】UVa10048 噪音 (floyd求min/max问题)
题目 从a点到b点, 找到一条路径,使得这条路径上的所有噪音中最大的值是所有路径中最小的, 这个噪音值便是要求的。 思路 首先询问次数较多,考虑多源。这个路径结点最大值最小问题,其实类似于最短路,floyd改一下即可。 代码 #include <cstdio> #include <cstdlib> #include <cstring> #i...原创 2018-09-05 00:38:16 · 165 阅读 · 0 评论