Pagini recente » Cod sursa (job #3279906) | Cod sursa (job #2429473) | Cod sursa (job #1005334) | Cod sursa (job #3000803) | Cod sursa (job #3281945)
#include <iostream>
#include <set>
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector <pair <long long, long long>> graph[50005];
long long n, m, start;
long long dist[50005];
set <pair <long long, long long>> node_distance;
const long long inf = 1ll << 50;
void receive_data();
void dijkstra();
void print_data();
int main()
{
receive_data();
dijkstra();
print_data();
return 0;
}
void print_data()
{
for(long long i = 2; i <= n; i ++)
if(dist[i] == inf)
fout << "0 ";
else
fout << dist[i] << ' ';
}
void dijkstra()
{
for(long long i = 1; i <= n; i ++)
dist[i] = inf;
node_distance.insert(make_pair(0, start));
dist[start] = 0;
while(!node_distance.empty())
{
pair <long long, long long> igga;
igga = *node_distance.begin();
node_distance.erase(node_distance.begin());
long long current_node = igga.second;
for(long long i = 0; i < graph[current_node].size(); i ++)
{
long long neighbor = graph[current_node][i].first;
long long weight = graph[current_node][i].second;
if(dist[neighbor] > dist[current_node] + weight)
{
if(node_distance.find({dist[neighbor], neighbor}) != node_distance.end())
node_distance.erase({dist[neighbor], neighbor});
node_distance.insert(make_pair(dist[current_node] + weight, neighbor));
dist[neighbor] = dist[current_node] + weight;
}
}
}
}
void receive_data()
{
fin >> n >> m;
start = 1;
long long first, second, weight;
for(long long i = 1; i <= m; i ++)
{
fin >> first >> second >> weight;
graph[first].push_back(make_pair(second, weight));
}
}