求助大佬,spfa全部TLE,
查看原帖
求助大佬,spfa全部TLE,
272314
Autonomier楼主2020/5/22 17:21
#include<bits/stdc++.h>
using namespace std;
const int maxn=6e5;
int head[maxn],cnt;
int dis[maxn],vis[maxn];
int n,m,s;
queue<int> q;
struct Eage
{
	int fr;
	int to;
	int v;
	int nt;
}e[maxn*2];
inline void update(int x,int y,int v)
{
	e[++cnt].nt=head[x];
	e[cnt].fr=x;
	e[cnt].to=y;
	e[cnt].v=v;
	head[x]=cnt;
}
inline void spfa(int s)
{
	memset(dis,0x3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	dis[s]=0;
	vis[s]=1;
	q.push(s);
	while(!q.empty())
	{
		int x=q.front();
		q.pop();
		vis[x]=0;
		for(int i=head[x];i;i=e[i].nt)
		{
			int y=e[i].to;
			int v=e[i].v;
			if(dis[y]>dis[x]+v)
				dis[y]=dis[x]+v;
			if(!vis[y])
			{
				q.push(y);
				vis[y]=1;	
			}
		}
	}
}
int main()
{
	scanf("%d%d%d",&n,&m,&s);
	for(int i=1;i<=m;i++)
	{
		int x,y,v;
		scanf("%d%d%d",&x,&y,&v);
		update(x,y,v);
	}
	spfa(s);
	for(int i=1;i<=n;i++)
	{
		if(dis[i]==1061109567)
			printf("2147483647 ");
		else
			printf("%d ",dis[i]);
	}
	printf("\n");
	return 0;
}
/*
4 4
1 2 1
2 3 1
3 4 1
2 4 1
*/
2020/5/22 17:21
加载中...