考试总结 模拟$101$

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个,我们就可以把它扔到原来的堆中去更新其他点

原文地址:https://www.cnblogs.com/casun547/p/11799422.html