关于次短路
  • 板块学术版
  • 楼主wo_hen_la
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/15 18:06
  • 上次更新2024/9/15 18:06:55
查看原帖
关于次短路
794701
wo_hen_la楼主2024/9/15 18:06

rt

顺便再问一个问题,这是部分AC代码

while(!r.empty()){
		int u=r.front();r.pop();
		vis[u]=0;
		for(auto vv:e[u]){
			int v=vv.first,w=vv.second;
			bool f=0;
			if(dis[u][0]+w<dis[v][0]){
				f=1;
				dis[v][1]=dis[v][0];
				dis[v][0]=dis[u][0]+w;
				if(dis[u][1]+w<dis[v][1]) f=1,dis[v][1]=dis[u][1]+w;
			}
			else if(dis[u][0]+w<dis[v][1] && dis[u][0]+w>dis[v][0]) f=1,dis[v][1]=dis[u][0]+w;
			if(f && !vis[v]) vis[v]=1,r.push(v);
		}
	}

改成下面这个连样例都过不了

while(!r.empty()){
		int u=r.front();r.pop();
		vis[u]=0;
		for(auto vv:e[u]){
			int v=vv.first,w=vv.second;
			if(dis[u][0]+w<dis[v][0]){
				dis[v][1]=dis[v][0];
				dis[v][0]=dis[u][0]+w;if(!vis[v]) vis[v]=1,r.push(v);
				if(dis[u][1]+w<dis[v][1]){
					dis[v][1]=dis[u][1]+w;
				}
			}
			if(dis[u][0]+w<dis[v][1] && dis[u][0]+w>dis[v][0]){
				dis[v][1]=dis[u][0]+w;
				if(!vis[v]) vis[v]=1,r.push(v);
			}
		}
	}
2024/9/15 18:06
加载中...