CF1693C Keshi in Search of AmShZ dijkstra好题

题意,给你一个图,边为有向边,你可以进行如下操作
1:随机选择一条出边走一步
2:删去一条出边
操作均花费1时间

最短的时间d,使得d时间内一定能从1走到n

这个题是在dijkstra算法上做了修改。
我们可以轻易的发现,从i走到n的最短时间,取决于i走到soni的最短时间,soni是i沿着出边走到的下一个点
这样就能够从n倒过来走,走到1,是一种dp的思想

每走到一个点,就看这个点的所有父亲,判断从哪个父亲转移过来是最好的,之后更新父亲的值

while (dui.size())
{
	auto [w, now] = dui.top();
	dui.pop();
	if (vis[now]) { continue; }
	vis[now] = 1;
	va[now] = w;
	int temp = iINF;
	for (auto e : retr[now])
	{
		temp = du[e]--;//核心代码,当前的节点对于父亲来说,一定是最好的
         //那么对于父亲来说,比e不好的节点有du[e]个,我们把不好的路都封上,之后更新父亲的值
          //每选择一个好的点,du[e]--
		if (vis[e]) { continue; }
		dui.push({ va[now] + temp,e });
	}
}

retr是反图

posted @ 2025-08-06 16:05  粉紫系超人气月兔铃仙  阅读(4)  评论(0)    收藏  举报