2023.10.1 kdy CSP-S模拟赛1
赛时:
先读题,简单推了推 T1,感觉十分可做。看 T2,好像没读懂题(?),要有一车人A前两个题吧(,看 T3,斯坦纳树?下一个,树的直径,不会!
接下来做T1,做做做,样例过了,大样例错了,检查,哦原来是DP细节写错了,太菜了,
40
40
40 分钟已经过去了!T2,读题,读懂了,胡一个贪心,样例过了,大样例又错了,以为是fc的问题,后来发现是我的问题!调调调,加了很多细节,感觉我的代码就是一块五颜六色的破布。应该差不多了。现在已经过去了
1.5
h
1.5h
1.5h。
最后
1.5
h
1.5h
1.5h,看了看T3和T4,找规律失败,骗分,摆烂。
赛后:
100+65+10+15=190
骗分大法好!但是T2挂了。
题解:
T1:
题意:
n
n
n 个点的完全图,点权
a
i
a_i
ai ,边权是
∣
a
u
−
a
v
∣
|a_u-a_v|
∣au−av∣,求有
m
m
m 条边,
2
×
n
2\times n
2×n个点的图的最小边权。
解析:
发现是个完全图,非常的好,每两个点之间都有边,而一个点它产生的最小边权一定是排完序后和左右相邻两个点产生的。
而且题目说不会有两个边连一个点,也就是不会选相邻的两个边权。最后dp找不选相邻两点,共选
m
m
m 个点的最小值就可以了。
T2:
题意:
一个长度为
n
n
n 的排列,但是把一些数变成了
0
0
0 。现在要求删去一个数,并把变成
0
0
0 的数填上之后能变成的字典序最小的长度为
n
−
1
n-1
n−1 序列。(填数要求填完后,序列还是
n
n
n 的排序,不能有重复的数)
解析:
贪心。填数首先想到从小到大填没填过的数,但是发现,我们还可以填删掉的那个数字。那我们看什么样的情况下要删掉,都知道最小的字典序一定是递增的,所以找到第一个递减的删掉就好了!
可是这样太单纯了,举个栗子:
0
0
0
4
4
4
3
3
3
1
1
1
按照前面的应该是243,但其实应该是143。所以我们在填数的时候还要和后面的最小值做比较,如果最小值比较小,当然是删掉最小值再放到这里来呀。注意以上提到的都具有一定先后顺序,还有很多细节需要注意。
T3:
题意:
题面太长了,直接复制吧
斯坦纳树是这么一类问题:给定一张图
G
=
<
V
,
E
>
G=<V,E>
G=<V,E>
,和点集
V
1
V_1
V1 ,你需要找到原图 的一张子图(即
原图中删去一些点和边之后得到的图),令子图为
G
′
=
<
V
′
,
E
′
>
G'=<V',E'>
G′=<V′,E′>
, 满足
V
1
V_1
V1 ⊆
V
′
V'
V′ ,子图
G
G
G 连通,且子
图中的边权和尽量小。
要实现斯坦纳树还是比较麻烦的,所以小可提出了一个弱化版的问题:给定一棵树 (树也是一种特殊的图),每次给出一个点集
V
′
V'
V′,求这个点集在树上的斯坦纳树大小(即边权和)。
即使是弱化版的斯坦纳树,小可也不会做,于是他提出了一个乱搞的做法:建立一个新的完全图
G
′
G'
G′ ,图中每个点都对应着询问点集
V
1
V_1
V1 中的一个点,两个点之间的边权为其在
V
1
V_1
V1 对应的点的树上距离。最后将这个完全图的最小生成树大小作为答案。
显然这个做法不是正确的,但是小可想知道,这个做法在什么情况下是正确的呢? 于是他给出了一个1到n的排列p,希望你对每个
i
(
1
<
=
i
<
=
n
)
i(1<=i<=n)
i(1<=i<=n) ,验证这个算法在点集
V
i
=
p
1
,
p
2
,
p
3
…
…
p
i
V_i={p_1,p_2,p_3……p_i}
Vi=p1,p2,p3……pi
上的正确性。
解析:
思想在那虚树路径上彷徨
−
−
−
−
《膜你抄》
思想在那虚树路径上彷徨----《膜你抄》
思想在那虚树路径上彷徨−−−−《膜你抄》
大抵是关于虚树的,我们发现,当一个虚点连了
>
2
>2
>2 t个实点,那就是不可行的。不过要注意边权等于
0
0
0 的情况,当边权为
0
0
0 时,可以不管。正着做不方便,可以倒着做,每次删除一个点。