5.20 一本通做题总结
题外话:我在5.20这天还是自己一个人啊qwq,孤独的自己做题(
上午:最小生成树部分:
1.构造完全图:题意
给定一棵边有边权的树,请确定一个完全图G使得该完全图G存在唯一的最小生成树为T并使得该完全图G总边权和最小,输出最小边权和。
没啥可说的,非常普通的一道最小生成树题。
将给定的树按照边权由小到大排序,并查集维护是否联通以及该连通块大小。每次加入一条树边时,都会使得两个并查集合并,合并时两个并查集中的点需要两两连边。因为要求存在唯一的最小生成树且要求边权和最小,显然除树边外每条边的权值都是树边权值+1即可。
2.汉堡店:题意:
二位平面内有 \(n\) 个点,点对距离为几何距离(即欧几里得距离)。点有点权。请选择两个点,并在这两个点之间连边,然后构造最小生成树T,答案为 \(\frac {val_a+val_b}{\sum_{i->T}\ edge_i}-dis(a,b)\) 文字描述的话就是,两个点的点权和除以该生成树中除两个点之间的边的边权和。求最大的答案值。 \(n\le 1000\)
先建出最小生成树 \(T\) ,计算 \(T\) 的边权和 \(sum\) ,枚举点对 \((a,b)\) , 答案 \(ans=\frac {val_a + val_b}{sum-max(a->b)}\) 也就是在最小生成树 \(T\) 中 \(a\) 到 \(b\) 的路径上的边权最大值。边权转点权,变成树上 \(RMQ\) 问题。复杂度 \(\Theta (n^2 logn)\)
3.生成树:
给定 \(n\) 个点 \(m\) 条边的无向图,边有边权。对于一棵树 \(T\) ,定义 \(gcd_T\) 为 \(T\) 中所有边权的 \(gcd\) 。求该图所有生成树的 \(gcd\) 的 \(lcm\)。 \(n\le 10^3, m\le 10^5, val_i\le 2^{15}-1, ans\le 2^{64}-1\)
前二十分: \(m=n-1\) 就一棵生成树,算一下就好了。
另二十分: \(m=n\) 先建出来最小生成树,然后用多出来的一条边接进树里会产生一个环,挨个判断去掉环上任意一条边之后的树的gcd是多少,用一个能维护类似 \(RMQ\) 的数据结构就可以。
另三十分: 边权都是2的整数次方。 不太会,不懂有啥特殊性质,可能仅仅是分解的时候只用分解一次就好吧。
正解:边权分解质因数,对每个质因数存次数,跑最大生成树,最后答案相乘即可。
4.与非:
规定特殊计算方法 \(nand\) : \(0\ nand\ 0 =1,0\ nand\ 1 =1, 1\ nand\ 0 =1, 1\ nand\ 1 =0\),给定一棵树,单点修改,区间查询 \(nand\) 和。在二进制下 \(k\) 位下进行。
可以发现新运算满足结合律和交换律。普通树链剖分即可。
5.矩阵最值:
二维线段树板子题。二维线段树就是把平面拆成四个部分处理,分别是左上右上左下右下,然后正常合并即可
浙公网安备 33010602011771号