莫名其妙TLE3点
查看原帖
莫名其妙TLE3点
383667
zhaotianle123楼主2020/10/17 23:38
#include<cstdio>
#include<queue>
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
const int N=1e5+5;
int dis[N];
struct Vex{
	int v,d;
	bool operator <(const Vex& rhs)const{
		return d>rhs.d;
	}
}vex;
vector<Vex>G[N];
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
	while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
void dij(int s)
{
	memset(dis,0x3f,sizeof(dis));
	dis[s]=0;
	priority_queue<Vex> pq;
	vex.v=s,vex.d=0;
	pq.push(vex);
	while(!pq.empty())
	{
		vex=pq.top();pq.pop();
		int u=vex.v,d=vex.d;
		for(int i=0;i<G[u].size();i++)
		{
			int v=G[u][i].v,w=G[u][i].d;
			if(d+w<dis[v])
			{
				dis[v]=d+w;
				vex.v=v,vex.d=dis[v];
				pq.push(vex);
			}
		}
	}
}
int n,m,s,u,v,w;
int main()
{
	n=read();m=read();s=read();
	for(int i=1;i<=m;i++)
	{
		u=read();v=read();w=read();
		G[u].push_back({v,w});
	}
	dij(s);
	for(int i=1;i<=n;i++)printf("%d ",dis[i]);
}
2020/10/17 23:38
加载中...