迪杰斯特拉TLE???
查看原帖
迪杰斯特拉TLE???
1284088
meifan666楼主2024/10/22 22:03
#include <bits/stdc++.h>
using namespace std;
#define inf INT_MAX
#define int long long
int n,m,cnt;
int a,b,c,fir[100010],nex[100010];
int dis[100010];
struct road{
	int sta,fin,v;
}r[100010];
void init(int u,int w,int vi){
	r[++cnt].sta=u,r[cnt].fin=w;r[cnt].v=vi;
	nex[cnt]=fir[u];
	fir[u]=cnt;
}
struct go{
	int sta,disc;
	bool operator<(const go &x)const{
		return x.disc<disc;
	}
};
priority_queue<go>p;
bool vis[100010];
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)dis[i]=inf;
	for(int i=1;i<=m;i++)fir[i]=-1,nex[i]=-1;
	for(int i=1;i<=m;i++){
		cin>>a>>b>>c;
		init(a,b,c);
		init(b,a,c);
	}
	p.push({1,0});
	dis[1]=0;
	while(!p.empty()){
		go t=p.top();p.pop();
		if(vis[t.sta])continue;
		vis[t.sta]=1;
		for(int i=fir[t.sta];i!=-1;i=nex[i]){
			int y=r[i].fin;
			if(dis[t.sta]+r[i].v<dis[y]){
				dis[y]=dis[t.sta]+r[i].v;
				if(!vis[y])p.push({y,dis[y]});
			}
		}
	}
	cout<<dis[n];
	return 0;
}
2024/10/22 22:03
加载中...