随笔分类 - 算法
摘要:gate \(A*\),有$90pts$的骗分算法。 \(f[i] = g[i] + h[i]\) \(bfs\),节点按$f[i]$排序; $g[i]$即为当前距离,$h[i]$为该点到终点$t$的最短距离。 首先建反向边,求出$t$到每个点的最短距离$h[i]$。 \(bfs\),对于每个结构体
阅读全文
摘要:gate 差分约束系统用来解决: 给出$n$个变量$x_1...x_n$,$m$个形如$x_i-x_j \le k$($k$为任意常量)的式子, 求$x_1...x_n$的一组可行解。 将式子变形为$x_i\le x_j + k$,发现刚好符合三角形不等式$dis[v]\le dis[u]+w[i]
阅读全文
摘要:gate 用时:60min? 迭代加深搜索\((IDDFS)\):有深度上限的$DFS$。 当搜索深度$>MaxDeep$时就返回。若这次没有找到,则$MaxDeep+1$。 时间上,会比$BFS$慢一点,因为每次会重复搜索前面一层; 空间上,等于$DFS$的空间,远小于$BFS$。 剪枝优化$(I
阅读全文
摘要:gate 用时:20min(看题解了) 题目大意: 给定圆锥的表面积$S$,求这个圆锥的最大体积$V$,以及此时它的高$h$与底面半径$r$。 \(S = \pi rl+\pi r^2\) \(h = \sqrt{l^2-r^2}\) \(V = \dfrac{1}{3}\pi r^2 h\) \(
阅读全文
摘要:gate 用时:10min 题目大意: 有$n$个坐标在$x$轴上的牛舍,$m$个牛,求两个牛之间最小距离的最大值。 二分答案。 将牛舍排序后,二分这个最大值$mid$,如果两个牛舍间的距离$\ge mid$则放一个牛$(sum+1)$,判断$sum \ge m$即可。 code #include<
阅读全文
摘要:gate 用时:写代码20min,debug+调emacs+卡常60min 因为就是想找个0/1分数规划题,直接标签搜索的,所以没有思考时间... 做2019各省省选的时候看到某个ac自动机+dp+0/1分数规划,想起来好像还没写过0/1分数规划...找个模板写一下。 $0/1$分数规划 有若干个元
阅读全文
摘要:"gate" 来清理下以前收藏的水题吧... 这道题是NOIP2018之前学长们押的题之一,虽然当时不会写,但是做法现在还记得 将一个数组上加一个等差数列,两次差分即可。 等差数列首项为s,末项为e,那么就有 l l+1 l+2 l+3 ... r r+1 r+2 a[i] s s+d s+2d s
阅读全文
摘要:传送门 我记得这题我去年写了树的做法,而且好像是用链前存的图xp总之还得了些分 树的部分,贪心+dfs即可。 基环树的部分,n^2暴力枚举断哪一条边...可以到88‘ 加上快读,去掉vector...总之我乱搞优化到了96' 吸氧过了... 正解似乎应该用tarjan判环,据说是nlogn (等会去
阅读全文
摘要:gate 再次感叹我太水了.. 贪心策略: 设当前加油站为i, 若i能到达的加油站中有油价比i低的加油站j,则在i加刚好能到达j的油,i→j 若没有,则在i把油加满(注意不要超出终点),i→i能到达的加油站中油价最低的一个 因为double写成int$debug$快一周... 代码如下qaq #in
阅读全文
摘要:背包问题【DP】 有一个背包,背包容量是M=150kg。有7个物品,物品不可以分割成任意大小。要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。 01背包 f[j]=max(f[j],f[j-w[i]]+c[i]); 搬书【DP】 陈老师桌上的书有三堆,每一堆都有厚厚的一叠,你想逗一下陈老师
阅读全文
摘要:昨天考了个博弈论题,发现自己SG函数什么的全忘了,于是重学一遍 前置知识 必胜点和必败点 ◦ P点:必败,换而言之就是谁处于此位置则在双方操作正确的情况下必败。◦ N点:必胜,处于此情况下双方操作均正确的情况下必胜。 性质 1.所有终结点是必败点P。2.从任何必胜点N操作, 至少有一种方式可以进入必
阅读全文
摘要:传送门 SAT(Satisfiability)问题: 有n个$bool$变量,m个需要满足的条件,形如“xi为true || xj为false || xk为 false…”。 给每个变量赋值,使得所有条件得到满足。 SAT问题已被证明为NP完全,只能暴力枚举求解。 特别地,如果每个条件中约定的变量
阅读全文
摘要:传送门 给出一个1到n的全排列,求经过m次局部升/降序排序后,第q位上的数字。(n.m≤1e5) 正解是:二分答案+线段树 (????WTF) 因为n很小,所以可以用二分答案枚举第q位上的数字。 把比二分的这个数mid小的数字全部改为0,其他的改为1,然后对01序列进行计数排序——即统计1的个数,然
阅读全文
摘要:传送门 我居然把swap写成了switch 如果路径相交,那么一定有LCA(a,b)在路径c,d上,或LCA(c,d)在路径a,b上 如果x在路径a,b上,需要满足条件: dpth[x] >= dpth[LCA(a,b)] LCA(a,x)=x 或 LCA(b,x)=x 就这样,求出LCA后分别判断
阅读全文
摘要:传送门>> 给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。 这个算法叫..WQS二分/带权二分/DP凸优化 用来解决一种特定类型的问题: 有n个物品,选择每一个都会有相应的费用,需要求出强制选need个物品时的最大/最小费用。 适用范围:设$f(x)$
阅读全文
摘要:三分查找和二分查找差不多,就是把一段区间平均分成三段而不是两段。 三分查找适用于凸函数,即有一个顶点,顶点两边单调的函数(比如二次函数)。 对于一段l~r的区间,把它分成l~L,L~R,R~r三段。 以顶点为最大值的情况为例, 若f(L)<f(R),则最高点在L~R或R~r中。 若f(L)>f(R)
阅读全文
摘要:Luogu P3295 mrclr两周前做的题让蒟蒻的我现在做? 第一眼组合计数,如果把数字相同的数位看作一个整体,除了第一位不能为零,剩下的每一位都有$0$~$9$十种。 设不同的位数为$x$,那么答案即为$9*10$x-1 给出两段相同的区间,可以把它们看作单独的一位一位对应,用并查集把它们合并
阅读全文
摘要:Gate 倍增模板,在一个严格小根堆中,给定$x,y$,求$x$的祖先中$≥y$的最高点。 注意清零 #include<cstdio> #include<iostream> #include<cstring> #define MogeKo qwq using namespace std; const
阅读全文
摘要:qwq 这题是知道了正解做法才写的.. 求每两点间最小权值最大的路径,本来我以为要每个点都跑一遍dij(?),后来意识到生成树好像是用来找这个的( ´▽`) 然后我问dtxdalao对不对,他说“我记得这道题好像要用倍增”(我:???剧透会被关进小黑屋的) 其实就是最大生成树是随便建的,然后对于每两
阅读全文
摘要:qwq 预处理出从$x$节点向上跳2i个节点的序号$p[x][i]$及节点深度$dpth[x]$, 寻找$lca$时,从$Max$(可能的最大深度)到0枚举$i$, 首先把较深的一个节点向上跳至深度相同, 然后两个点同步动作,若$p[x][i]≠p[y][i]$则跳。 最终返回他们的父亲$p[x][
阅读全文

浙公网安备 33010602011771号