Pagini recente » Cod sursa (job #1815189) | Cod sursa (job #1210514) | Cod sursa (job #2618364) | Cod sursa (job #453068) | Cod sursa (job #2344945)
#include <bits/stdc++.h>
#define pb push_back
#define INF (1LL<<31) - 1
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector<int> Dijstra(vector<vector <pair<int, int> > >& adj, int V, int s)
{
vector<int> dist(V + 1, INF);
vector<bool> visited(V + 1, false);
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > q;
dist[s] = 0;
q.push({0, s});
while(!q.empty())
{
int current = q.top().second; q.pop();
visited[current] = true;
for(const auto& n : adj[current])
if(dist[n.first] > dist[current] + n.second)
{
dist[n.first] = dist[current] + n.second;
if(!visited[n.first])
q.push({dist[n.first], n.first});
}
}
return dist;
}
int main()
{
vector<vector <pair<int, int> > > adj; // {y, c} in adj[x] <=> exists (x, y) edge with cost c
int x, y, c, V, E;
fin >> V >> E;
adj.resize(V + 1);
for(int i = 0; i < E; i++)
{
fin >> x >> y >> c;
adj[x].pb({y,c});
}
vector<int> result = Dijstra(adj, V, 1);
for(auto it = result.begin() + 2; it != result.end(); it++)
fout << (*it != INF ? *it : 0) << " ";
return 0;
}