想问一下这两种判断方法有什么区别?
查看原帖
想问一下这两种判断方法有什么区别?
270791
WanderingTrader楼主2024/1/23 14:28

参考第一篇题解,在dijkstra中

inline void Dijkstra(int s,ll dis[],int f=0){
 for(int i=1;i<=n;++i) dis[i]=Inf;
 dis[s]=0;
 pq.push((Node){s,0});
 while(!pq.empty()){
 	Node fa=pq.top();pq.pop();
 	
 	int x=fa.pos;
 	if(fa.dis>dis[x]) continue;
 	for(int i=head[x],y;i;i=e[i].nxt){
 		y=e[i].to;
 		if(dis[y]>fa.dis+e[i].len){
 			lstvis[y]=e[i].id;
 			dis[y]=fa.dis+e[i].len;
 			if(f==1&&!On_path[y]) l[y]=l[x]; //here
 			if(f==2&&!On_path[y]) r[y]=r[x]; //here
 			pq.push((Node){y,dis[y]});
 		}
 	}
 }
}

在注释处的两行,我没有用on_path[y]来判断,而是判断如果边(x,y)不在1到n的最短路上就更新l,r。这样的做法会WA on #16。所以想问一下用边判断和用点判断有什么区别,谢谢。

2024/1/23 14:28
加载中...