3TLE3AC求助
查看原帖
3TLE3AC求助
339299
osfly楼主2021/7/29 16:47
#include<cstdio>
#include<queue>
using namespace std;
priority_queue<pair<int,int> > q;
const int INF=1e9+1;
struct edge
{
	int v;
	int w;
	int nxt;
}e[200100];
int head[100100];
int dis[100100];
bool vis[100100];
int n,m,s;
int tot=1;
int curr;
void add(int u,int v,int w)
{
	e[tot].v=v;
	e[tot].w=w;
	e[tot].nxt=head[u];
	head[u]=tot;
	tot++;
}
int main()
{
	scanf("%d%d%d",&n,&m,&s);
	for(int i=1;i<=n;i++) head[i]=-1,dis[i]=INF;
	for(int i=1,u,v,w;i<=m;i++)
	{
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
	}
	curr=s;
	dis[curr]=0;
	vis[curr]=true;
	q.push(make_pair(dis[curr],curr));
	while(!q.empty())
	{
		curr=q.top().second;
		q.pop();
		for(int i=head[curr],v,w;i!=-1;i=e[i].nxt)
		{
			v=e[i].v;
			w=e[i].w;
			if(dis[v]>dis[curr]+w)
			{
				dis[v]=dis[curr]+w;
				q.push(make_pair(-dis[v],v));
			}
		}
	}
	for(int i=1;i<=n;i++) printf("%d ",dis[i]);
	return 0;
}
2021/7/29 16:47
加载中...