https://www.luogu.org/problem/show?pid=3371
看着和spfa可像了
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <bits/stdc++.h>
#include <queue>
using namespace std;
const int INF=2147483647;
int n,m,ss;
vector< pair<int ,int > > d[100005];
struct node
{
friend bool operator<(node a,node b)
{
return a.y>b.y;
}
int x,y;
} s[100005];
int disk(int x)
{
priority_queue<node> dp;
for(int i=0;i<=n;i++)
{
s[i].y=INF;
s[i].x=i;
}
s[x].y=0;
dp.push(s[x]);
while(dp.size())
{
x=dp.top().x; dp.pop();
int l=s[x].y;
int xe,ye;
//cout<<d[x].size()<<' '<<x<<endl;
for(int i=0;i<d[x].size();i++)
{
xe=d[x][i].first;
ye=d[x][i].second;
if(s[xe].y>l+ye)
{
s[xe].y=l+ye;
// cout<<s[xe].y<<' '<<xe<<' '<<ye<<endl;
dp.push(s[xe]);
}
}
}
for(int i=1;i<=n;i++)
{
if(i-1) cout<<" ";
cout<<s[i].y;
}
cout<<endl;
}
int main()
{
scanf("%d%d%d",&n,&m,&ss);
int x,y,z;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&z);
d[x].push_back(make_pair(y,z));
}
disk(ss);
}