80分迪斯杰,TLE求助
查看原帖
80分迪斯杰,TLE求助
1284088
meifan666楼主2024/7/21 16:20
#include<bits/stdc++.h>
#define int long long
#define inf 2500020
using namespace std;
int n,m,s,t;
int u,v,w;
int fir[6500],nex[6500];
int dis[3000];
bool vis[3000];
int cnt;
struct road{
	int from,to,v;
}r[6500];
struct di{
	int fro,v;
	bool operator<(const di &x)const{return x.v<v;}
};
priority_queue<di>p;
void add(int a,int b,int c){
	r[cnt].from=a;
	r[cnt].to=b;
	r[cnt].v=c;
	nex[cnt]=fir[a];
	fir[a]=cnt;
	cnt++;
}
signed main(){
	cin>>n>>m>>s>>t;
	for(int i=0;i<=n+1;i++){
		dis[i]=inf;
	}
	memset(fir,-1,sizeof(fir));
	memset(nex,-1,sizeof(nex));
	for(int i=0;i<m;i++){
		cin>>u>>v>>w;
		add(u,v,w);
		add(v,u,w);
	}
	dis[s]=0;
	p.push(di{s,0});
	while(!p.empty()){
		di t=p.top();
		p.pop();
		if(vis[t.fro])continue;
		vis[t.fro]=1;
		int sta=t.fro;
		for(int k=fir[sta];k!=-1;k=nex[k]){
			int y=r[k].to;
			if(dis[sta]+r[k].v<dis[y]){
				dis[y]=dis[sta]+r[k].v;
				if(vis[y]==0)p.push(di{y,dis[y]});
			}
		}
	}
	cout<<dis[t];
	return 0;
}
2024/7/21 16:20
加载中...