TLE #1#2#3求助dijkstra
查看原帖
TLE #1#2#3求助dijkstra
350565
小邱楼主2022/4/4 16:54
#include<bits/stdc++.h>
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
const int N=100005,M=200005,inf=2147483647;
struct noode{
	int t,w,nxt;
}a[M];
struct no{
	int t,w;
	bool operator < (const no b) const {
	if(t>b.t)
		return 1;
	return 0;
	}
}p;
priority_queue<no>q;
int h[N],dis[N],k,n;
inline void add(int s,int t,int w)
{
	k++;
	a[k].nxt=h[s];
	a[k].t=t;
	a[k].w=w;
	h[s]=k;
}
void dijkstra(int s)
{
	p.t=s;
	p.w=0;
	q.push(p);
	int i,t,w,k;
	for(i=1;i<=n;i++)
	{
		dis[i]=inf;
	}
	dis[s]=0;
	while(q.size())
	{
		t=q.top().t;
		w=q.top().w;
		q.pop();
		if(w!=dis[t])
		{
			continue;
		}
		for(i=h[t];i;i=a[i].nxt)
		{
			w=a[i].w;
			k=a[i].t;
			if(dis[k]>dis[t]+w)
			{
				dis[k]=dis[t]+w;
				p.t=k;
				p.w=dis[k];
				q.push(p);
			}
		}
	}
}
int main()
{
	int i,x,y,z,m,s;
	scanf("%d%d%d",&n,&m,&s);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		add(x,y,z);
	}
	dijkstra(s);
	for(i=1;i<=n;i++)
	{
		printf("%d ",dis[i]);
	}
	return 0;
}
2022/4/4 16:54
加载中...