#include <bits/stdc++.h>
using namespace std;
vector<int>v[100001],w[100001];
int d[100001];
bool k[100001];
int n,m,s;
int MAX=INT_MAX/2;
inline int read() //以字符串形式读入数字可提速
{
int x=0;
char c=getchar();
for(; c<'0' || c>'9'; c=getchar());
for(; c<='9' && c>='0'; c=getchar())
x=(x<<3)+(x<<1)+c-'0'; //位运算优化即x*8+x*2=x*10
return x;
}
void Dijstra()
{
for(int i=1; i<=n; i++)
d[i]=MAX;
for(int i=v[s].size()-1; i>=0; i--)
d[v[s][i]]=w[s][i];
d[s]=0;
k[s]=1;
for(int j=1; j<n; j++)
{
int mmax=MAX,p;
for(int i=1; i<=n; i++)
if(d[i]<mmax&&k[i]==0)
mmax=d[i],p=i;
k[p]=1;
for(int i=v[p].size()-1; i>=0; i--)
d[v[p][i]]=min(d[v[p][i]],d[p]+w[p][i]);
}
for(int i=1; i<=n; i++)
printf("%d ",d[i]);
}
int main()
{
// freopen("map.in","r",stdin);
// freopen("map.out","w",stdout);
cin>>n>>m>>s;
int x,y,z;
while(m--)
{
x=read(),y=read(),z=read();
v[x].push_back(y);
w[x].push_back(z);
}
Dijstra();
return 0;
}
rt,还没写堆优化。
是不加堆优化过不去任何点,还是我写丑了?