NOI_2019_T1 求助——
查看原帖
NOI_2019_T1 求助——
91681
Error_666楼主2020/6/13 17:00

从1号点开始搜,没走过的边就走继续搜下去,回溯的时候就更新走完当前边的最小烦躁值。

这样复杂度应该是O(m)(每条边仅搜过一次)

请问问什么会超时呢(85pts)?蒟蒻求助qwq

蒟蒻的关键代码:

void dfs(int x,int dfn,int id) { //当前点,当前时间,走到当前点的边的编号
	if(vis[id]) return; //如果当前边搜过了就return
	for(int i=h[x];i;i=e[i].nex) {
		int y=e[i].to;
		if(dfn<=e[i].v1) { //如果时间不矛盾的话
			if(y==n) f[i]=e[i].v2;
			else dfs(y,e[i].v2,i);
		}
	}
	for(int i=h[x];i;i=e[i].nex) //回溯更新
		if(dfn<=e[i].v1)
			f[id]=min(f[id],f[i]+cal(e[i].v1-dfn));
	vis[id]=1; //标记当前边已经搜过
}
2020/6/13 17:00
加载中...