Pagini recente » Diferente pentru problema/sdistante intre reviziile 12 si 4 | Atasamentele paginii LimeEval : Evaluator pe Windows Free | Cod sursa (job #1450596) | Cod sursa (job #2184233) | Cod sursa (job #3354271)
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct Node{
int dist, next;
bool operator < (const Node & other) const{
return dist > other.dist;
}
};
const int INF = 1e9;
vector<vector<pair<int, int>>> graf;
vector<int> distant;
void dijkstra(int start, int n)
{
for(int i = 0; i <= n; i++)
{
distant.push_back(INF);
}
priority_queue <Node>pq;
distant[start] = 0;
pq.push({0, start});
while(!pq.empty())
{
Node curent = pq.top();
pq.pop();
int u = curent.next;
int d = curent.dist;
for(auto &vecin : graf[u])
{
int v = vecin.first;
int cost = vecin.second;
if(distant[u] + cost < distant[v])
{
distant[v] = distant[u] + cost;
pq.push({distant[v], v});
}
}
}
}
int main()
{
int muchii, noduri, a, b, c;
fin >> noduri >> muchii;
graf.resize(noduri+1);
for(int i = 0; i < muchii; i++)
{
fin >> a >> b >> c;
graf[a].push_back({b, c});
}
dijkstra(1, noduri);
for(int i = 2; i <= noduri; i++)
{
if(distant[i] == INF)
fout << '0' << ' ';
else
fout << distant[i] << ' ';
}
return 0;
}