#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=2e5+10;
int n,m,s;
int head[N],ver[M],edge[M],nxt[M],tot=0;
int d[N];
bool v[N];
priority_queue<pair<int,int> > q;
int rd()
{
int f=1,k=0;char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
k=k*10+c-'0';
c=getchar();
}
return f*k;
}
void adde(int x,int y,int z)
{
edge[++tot]=z;
ver[tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
void dijkstra(int s)
{
memset(d,0x3f,sizeof(d));
memset(v,0,sizeof(v));
d[s]=0;
q.push(make_pair(0,s));
while(!q.empty())
{
int x=q.top().second;q.pop();
if(v[x]) continue;
v[x]=1;
for(int i=head[x];i;i=nxt[i])
{
int y=ver[i],z=edge[i];
if(d[y]>d[x]+z)
{
d[y]=d[x]+z;
q.push(make_pair(-d[y],y));
}
}
}
}
int main()
{
n=rd();m=rd();s=rd();
for(int i=1;i<=m;i++)
{
adde(rd(),rd(),rd());
}
dijkstra(s);
for(int i=1;i<=n;i++)
{
printf("%d ",d[i]);
}
return 0;
}
这样会WA。
但是79行加边改成这样就能过:
for(int i=1;i<=m;i++)
{
int x=rd(),y=rd(),z=rd();
adde(x,y,z);
}
为什么啊