求大佬帮忙看一下代码,Dijkstra+链式前向星
查看原帖
求大佬帮忙看一下代码,Dijkstra+链式前向星
82165
湫泷楼主2021/11/25 20:40

全部TLE了,求救

#include<bits/stdc++.h>
using namespace std;
int read(){
	int x=0,f=1;
	char s=getchar();
	while(s<'0'||s>'9'){
		if(s=='-'){
			f=-1;
		}
		s=getchar();
	}
	while(s>='0'&&s<='9'){
		x=x*10+s-'0';
		s=getchar();
	}
	return x*f;
}
struct edge{
	int to,nxt,val;
}edge[500010];
const int INF=2147483647;
int cnt,n,m,s,dis[10010],vis[10010],head[10010];
int add(int u,int v,int w){
	edge[++cnt].to=v;
	edge[cnt].val=w;
	edge[cnt].nxt=head[u];
	head[u]=cnt;
}
int main(){
	n=read(),m=read(),s=read();
	for(int i=1;i<=n;i++){
		dis[i]=INF;
		head[i]=-1;
		vis[i]=0;
	}
	dis[s]=0;
	for(int i=1;i<=m;i++){
		int u,v,w;
		u=read(),v=read(),w=read();
		add(u,v,w);
	}
	for(int i=1;i<n;i++){
		int k=s,mn=INF;
		for(int j=1;j<=n;j++){
			if(vis[j]==0&&dis[j]<mn){
				mn=dis[j],k=j;
			}
		}
		vis[k]=1;
		for(int j=head[k];j!=-1;j=edge[j].nxt){
			int v=edge[j].to;
			dis[v]=min(dis[v],dis[k]+edge[j].val);
		}
	}
	for(int i=1;i<=n;i++){
		printf("%d ",dis[i]);
	}
	return 0;
}
2021/11/25 20:40
加载中...