小邱 @ 2022-04-04 16:54:15
#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;
}
by RainFestival @ 2022-04-04 17:10:47
@小邱 你的比较函数 <
应该比较
by 小邱 @ 2022-04-04 17:29:03
@RainFestival 感谢感谢!