- rt
- 不知到哪个地方错了,把数据下下来本地测试也没有超时啊,提交上去就超时了
- 代码如下
#include<bits/stdc++.h>
#define N 100010
using namespace std;
inline int rd(){
int data=0;int w=1;char ch=0;
ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch>='0'&&ch<='9')data=(data<<1)+(data<<3)+(ch^48),ch=getchar();
return data*w;
}
struct Node{
int u,v,w;
int nxt;
}e[N<<1];
int first[N],cnt;
int add(int u,int v,int w){
e[++cnt].u=u;e[cnt].v=v;e[cnt].w=w;
e[cnt].nxt=first[u];first[u]=cnt;
}
int dis[N];
bool vis[N];
priority_queue< pair<int,int> >q;
void dijkstra(int n,int s){
memset(dis,0x3f,(n+1)*sizeof(int));
dis[s]=0;
q.push(make_pair(-dis[s],s));
while(!q.empty()){
int x=q.top().second;q.pop();
if(vis[x])continue;
vis[x]=1;
for(int i=first[x];i;i=e[i].nxt){
int v=e[i].v;int w=e[i].w;
if(dis[v]>dis[x]+w){
dis[v]=dis[x]+w;
q.push(make_pair(-dis[v],v));
}
}
}
}
int n,m,s;
int main(){
n=rd();m=rd();s=rd();
int u,v,w;
for(int i=1;i<=m;i++){
u=rd();v=rd();w=rd();
add(u,v,w);
}
dijkstra(n,s);
for(int i=1;i<=n;i++)printf("%d ",dis[i]);
return 0;
}