Pagini recente » Monitorul de evaluare | Cod sursa (job #11220) | Cod sursa (job #391465) | Cod sursa (job #1069871) | Cod sursa (job #3324938)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const ll inf = 1000000000;
vector<vector<pair<ll, ll>>> adj_list;
vector<ll> dist;
ll n, m;
void read()
{
fin >> n >> m;
adj_list.assign(n + 1, {});
dist.assign(n + 1, inf);
dist[1] = 0;
for (ll i = 0; i < m; i++)
{
ll x, y, c;
fin >> x >> y >> c;
adj_list[x].push_back({y, c});
}
}
void dijkstra()
{
set<pair<ll, ll>> Q;
Q.insert({dist[1], 1});
while (!Q.empty())
{
ll v = Q.begin()->second;
Q.erase(Q.begin());
for (auto &next : adj_list[v])
{
ll w = next.second;
ll u = next.first;
if (dist[v] + w < dist[u])
{
Q.erase({dist[u], u});
dist[u] = dist[v] + w;
Q.insert({dist[u], u});
}
}
}
}
int main()
{
read();
dijkstra();
for (ll i = 2; i <= n; i++)
{
if (dist[i] != inf)
fout << dist[i] << ' ';
else
fout << 0 << ' ';
}
return 0;
}