1.点双的缩点 点双中的边全部去掉,连向一个新点
2.有向图至少加几条边变成强连通图
(易证明,无环的有向图至少存在一个入度为0/出度为0的点)先缩点,ans=max(入度为0的点数,出度为0的点数)(只有一个点说明已经是强连通图,要特判掉)
注意一个点的时候,是否算作强连通,要看题目!!
有向图至少加几条边使得每条边都在某个强连通分量内:和上面的问题一样,不过要把单点去掉。
3.无向图至少加几条边变成边双
先缩点,ans=ceiling(度数为1的点的数量/2)+度数为0的点的数量(特判只有一个点)
证明(简略):一条边可以干掉两个叶子 叶子干光了就是双联通 一个点可以插入到一条边里去
无向图至少加几条边变成点双?
4.设f[u][i]为在节点u的子树内,费用限制为i的条件下能取到的最大价值
5.树上莫队
6.//return dcmp(cross(a-p,b-p))==0&&dcmp(dot(a-p,b-p))<0;//ac
return dcmp(length(a-p)+length(b-p)-length(a-b))==0&&!(p==a)&&!(p==b);//wa,误差巨大
7.double在g++中的输入是%lf,输出时%f。什么时候用什么?
g++中abs一定要有cstdlib,c++不用。
8.printf(“%.3f”,0);有错?
9.线和凸包是否有交、凸包和凸包是否有交
线和凸包:找线上一个远一些的点,找到两条切线,判断线是否在切线之间
凸包是否有交:?
10.点和凸包的切线
凸包外的点p向凸包上一点连线,有的是入凸包,有的是出凸包。则cross(a[i]-p,a[i+1]-a[i])的方向是不同的。找到最后一个入凸包的点,那么下一个点就是切点。左右切线找的时候只需要把方向判断反一下即可。
判断一个点在凸包内:找不到切线,即找不到入凸包的点。
11.二维区间和 树套树?
12.函数内新建pq?在函数结束时会自动清空吗 会吧
13.dp of dp
14.异或hash? 冲突概率1/个数
15.并查集 撤销?拆并查集?不能拆
16.判断两个点在一个点的不同子树中?
17.矩阵转移?
18.决策单调性的写法
19.prufer编码
20.指针和迭代器
21.O(n)找第k大
22.遍历set是O(n)
23.long double怎么用啊
24.int128怎么用
25.
float128怎么用
26.01覆盖问题是npc吗 反正不可做
27.保留x位小数变成-0.00000?