比赛链接
https://ac.nowcoder.com/acm/contest/1109?&headNav=www#question
B
设d[x]表示x到其最小生成树上父节点的距离。
则对于非树边x-y,如果d[y]=w(x,y),就意味着从x到y也可以作为最小生成树的一部分。(这个判断可以用类似dijstra的方法实现)
考虑贪心构造答案,只要让一个点周围所有可能进入最小生成树的边都割断即可。
因此对于每个点,计算和它相连的可能进入最小生成树的边的个数,然后取一次最小值即可。
代码如下
/*
设d[x]表示x到其最小生成树上父节点的距离。
则对于非树边x-y,如果d[y]=w(x,y),就意味着从x到y也可以作为最小生成树的一部分。(这个判断可以用类似dijstra的方法实现)
考虑贪心构造答案,只要让一个点周围所有可能进入最小生成树的边都割断即可。
因此对于每个点,计算和它相连的可能进入最小生成树的边的个数,然后取一次最小值即可。
*/
#include
#include
#include
#include
#include
#include
C
对两个数组分别求线性基,然后对这两个线性基求交,答案就是
代码如下
/*
*/
#define method_1
#ifdef method_1
/*
*/
#include
#include
#include
#include
#include
#include
E
将选择区间转化为选择区间的两个端点,因此首先对a数组求一遍前缀和。然后将这n+1个数(包括第0个数)排序,从两头开始向中间取数即可。(因为绝对值的存在,所以不用考虑顺序)
代码如下
/*
*/
#define method_1
#ifdef method_1
/*
*/
#include
#include
#include
#include
#include
#include
H
找出树的直径上的两个端点a和b(3遍dfs),然后将每个点和两个端点中较远的点连起来即可。
代码如下
/*
找出树的直径上的两个端点a和b(3遍dfs),然后将每个点和两个端点中较远的点连起来即可。
*/
#include
#include
#include
#include
#include
#include
I
考虑一个性质,对于任意正整数n和m,总能找到。因此,为了让结果f(t)尽量小,就需要让i和j取到上式中的a和b。于是所求的答案就是这个数的中间值,即
如果觉得上面的话过于抽象,那么那样例具体解释下。
例如n=1,m=2时,lcm(n,m)=2。那么对于i、j,能取到的值就是0、1/2、1...
这之间最小的间距就是1/2,所以当t为1/4时,无论i和j怎么调整,答案都不会小于1/4。
代码如下
/*
*/
#define method_1
#ifdef method_1
/*
*/
#include
#include
#include
#include
#include
#include