关于 Dijkstra
  • 板块学术版
  • 楼主wo_hen_la
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/19 11:10
  • 上次更新2024/8/19 11:13:41
查看原帖
关于 Dijkstra
794701
wo_hen_la楼主2024/8/19 11:10

这是最短路(弱化版)的AC代码,为什么这题要把判vis的注释掉,而P1875要加上这一句

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define N (int)(2e5+5)

int n,m,s;
int dis[N];
bool vis[N];
vector<pair<int,int> > e[N];
void dij()
{
	for(int i=0;i<=n;i++) dis[i]=2147483647;
	dis[s]=0;
	for(int i=1;i<=n;i++){
		int mi=0;
		for(int j=1;j<=n;j++){
			if(!vis[j] && dis[j]<dis[mi]) mi=j;
		}
		vis[mi]=1;
		for(auto vv:e[mi]){
			int v=vv.first,w=vv.second;
			//if(!vis[v]) continue;
			dis[v]=min(dis[v],dis[mi]+w);
		}
	}
	for(int i=1;i<=n;i++) cout<<dis[i]<<" ";
}
int main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	cin>>n>>m>>s;
	while(m--){
		int u,v,w;
		cin>>u>>v>>w;
		e[u].push_back({v,w});
	}
	dij();
	return 0;

}
2024/8/19 11:10
加载中...