Pagini recente » Cod sursa (job #1824121) | Cod sursa (job #1282829) | Cod sursa (job #1267056) | Cod sursa (job #2360060) | Cod sursa (job #2771138)
#include <bits/stdc++.h>
#define DAU ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define PLEC return 0;
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define cin fin
#define cout fout
#define N 50005
#define infinit 10000000000
vector < pair<int, int> > a[N];
priority_queue < pair<int, int> > v;
int n, s, x, y, p, f[N];
int ord, k, m, c, pmax;
long long d[N];
int main()
{
DAU
cin >> n >> m >> c;
for(int i = 1 ; i <= m ; i++)
{
cin >> x >> y >> p;
a[x].push_back({y,p});
a[y].push_back({x,p});
}
for(int i = 1 ; i <= n ; i++)f[i] = 0, d[i] = infinit;
for(int i = 0 ; i < a[c].size() ; i++)
{
v.push({-a[c][i].second,a[c][i].first});
d[a[c][i].first] = a[c][i].second;
}
f[c] = 1, d[c] = 0;
d[0] = infinit;
for(int k = 1 ; k < n ; k++)
{
for(; !v.empty() ; )
{
if(f[v.top().second] == 0)
{
pmax = v.top().second ;
break;
}
else v.pop();
}
f[pmax] = 1;
for(int i = 0 ; i < a[pmax].size() ; i++)
{
if(f[a[pmax][i].first] == 0 && d[a[pmax][i].first] > d[pmax]+a[pmax][i].second)
{
d[a[pmax][i].first] = d[pmax]+a[pmax][i].second;
v.push({-d[a[pmax][i].first],a[pmax][i].first});
}
}
}
for(int i = 1 ; i <= n ; i++)
{
if(d[i] == infinit)cout << "-1 ";
else cout << d[i] << " ";
}
PLEC
}