摘要:
参考:@junble19768 考 csp 的小女孩 基本上是真实故事。 “再多复习一个数据结构吧。”笨蛋机脑袋里想着 splay,在考场外孤苦伶仃地站着,周围的人熙熙攘攘,他们都有说有笑,仿佛做足了准备,只有这个考 csp 的笨蛋机因紧张而瑟瑟发抖。 笨蛋机已经坐在学军考场的座位上,这时候的他脑子 阅读全文
摘要:
一道有意思的题答构造题。题目是要你卡掉一个算法,给另一个算法过。前 6 个点是最短路的三种解法,后面 2 个点是一个染色问题。 最短路部分 一些需要了解的东西: FloydWarshall 就是 \(O(V^3)\),和边无关。 ModifiedDijkstra 堆优化的 Dijkstra,正权图里 阅读全文
摘要:
一个一个加球。 对于每个局面,把所有加和为完全平方数的球对先拆点,再连边。 拆点就是为了变成二分图。 根据二分图相关定理:最小路径覆盖数=总点数-最大匹配数。计算出每个局面的最大匹配数,然后得出最小路径覆盖。和 \(n\) 比较,然后输出就可以了。 怎么看都比网络流简单。 #include<bits 阅读全文
摘要:
这种题是经典的二分图套路题,做法也非常经典。 对于在棋盘上的和一行、一列有关的题目,应当把每行、每列作为二分图上的点跑最大匹配,就是把每行和每列匹配起来。 这道题存在“硬石头”的情况,我们应当换个角度。考虑“行段”和“列段”。一个行段即在同一行的连续的没有硬石头的段,列段同理。显然应当满足每个行段和 阅读全文
摘要:
对于这类和全排列有关的 dp 题,我们第一时间应该想到的套路是用 \(f[i][j]\) 表示从 $1$ 到 \(i\) 的全排列,存在 \(j\) 个逆序对的情况数。和这题类似的题是 P2401 不等数列。 然后这题的转移也比较容易,只要枚举一下第 \(i\) 个数插入的位置是哪个,用 \(i-1 阅读全文
摘要:
莫比乌斯反演 一、线性筛 void init() { v[1]=mu[1]=phi[1]=1; int cnt=0; for (int i=2;i<=MAXN;++i) { if (!v[i]) p[++cnt]=i,mu[i]=-1,phi[i]=i-1; for (int j=1;j<=cnt& 阅读全文
摘要:
奇怪的搜索技巧:优化搜索 零、bfs有关 双端队列bfs 解决问题:边权只有0与1的最短路 时间:\(O(n)\) 算法的整体框架与一般的广搜类似,只是在每个节点沿分支拓展时稍作改变。如果这条分支边权为0,则从队首入队,否则从队尾入队。这样我们能保证,任意时刻广搜队列中节点对应的距离值都有“两端性” 阅读全文
摘要:
离线分治:整体二分与CDQ分治 这两个算法都是离线的分治算法。其中CDQ分治是基于时间的分治算法。整体二分是基于值域的分治算法。先讲讲整体二分吧。 我们拿[ZJOI2013]K大数查询作为例子。 一、原理:将所有的修改和查询操作离线存下来。每次二分所有修改和询问操作,分成两部分解决。 二、每个子问题 阅读全文
摘要:
凸壳上的单调队列:斜率优化 一、性质:一种动态规划的优化。 二、前置:dp、单调队列。 三、适用:\(dp[i]=a[i]*b[j]+c[i]+d[j]\)。$a[i]$单调递增。 四、方法: 移项:\(-a[i]b[j]+dp[i]-a[i]=d[j]\),把$b[j]$看作$x$,把$d[j]$ 阅读全文
摘要:
广度优先搜索(水的一波~) 每次交换数组里连续两个数 找到第一个合法答案时不要停,继续 找到第二个时输出就好了 上代码 #include<bits/stdc++.h> using namespace std; int n,f[7]; bool flag;//flag表示是否找到了第一个合法答案 st 阅读全文