T1 30分钟打完检查了10,就没管了
所以这一场心态来说算是比较平和的
T3写完暴力没多想,虽然最后也没有拉开差距
T2考场上17个A掉了,想到了一个比较向正解的贪心,没过样例之后就没有深入去想
但是考场上中间的时候很困,虽然昨天晚上睡得很好,但是紧张度不够,一定要尽快提升每天这个时间的状态
T1「模拟」
淼
T2「最短路」
真的十分考察对于最短路的理解
我考场上yy的假贪心是先跑一个不删边的最短路
然后对于每个点要删的边,将与它相连的点的(dis+val_i)从小到大排序,
然后就删去最小的d个
样例都没过,十分显然的是单点最优解并非全局最优解
正解:
遇到最短路,我们不妨先想想$dijkstra$的思路
它基于一个很重要的贪心,对于非负边权来说,
当一个点第一次出堆的时候,所有能更新它ans的(即dis小于它的)
已经处理过了,所以这个点以后就不可能再被更新了
对于这道题目,我们定义dis[x]表示从x出发到任一出口的最小距离
首先初始化,出口的dis为0,并且入堆,
对于一个点来说,它的dis可以被已经更新过的 相连的 点的dis+val_edge更新
而这样就保证全局最优了,
所以我们只需要删去能更新这个点的最小的前d个点
它的dis=第d+1大的点,
我们再用一个大根堆维护可以更新这个点的值,
那么只要这个点的待更新值达到了d+1个,我们就可以把它扔到原来的堆中去更新其他点