Pagini recente » Cod sursa (job #2268150) | Cod sursa (job #69931) | Cod sursa (job #3207526) | Cod sursa (job #1370565) | Cod sursa (job #2791263)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
ifstream f ("dijkstra.in");
ofstream g ("dijkstra.out");
vector < pair < int, int > > v[50002];
vector < pair < int, int > > q;
bool visited[50002];
int n, m, d[50002];
struct comp
{
bool operator () (pair <int, int> a, pair <int, int> b)
{
return a.second > b.second;
}
};
priority_queue < pair < int, int >, vector < pair <int, int > >, comp > pq;
/*int insert_element (pair <int, int> x)
{
q.push_back(x);
}
int get_next_element ()
{
int minim = q[0].second;
int min_index = 0;
for (int i = 0; i < q.size(); ++i)
{
if (q[i].second < minim)
{
minim = q[i].second;
min_index = i;
}
}
return min_index;
}
void delete_element (int index)
{
q.erase(q.begin() + index);
}
bool is_structure_empty ()
{
return q.size() == 0;
}*/
void dijkstra ()
{
d[1] = 0;
//insert_element({1, 0});
pq.push({1, 0});
//while (!is_structure_empty())
while (!pq.empty())
{
//int curr_index = get_next_element();
//pair < int, int > curr = q[curr_index];
//cout << curr.first << " " << curr.second << '\n';
//delete_element(curr_index);
pair <int, int> curr = pq.top();
pq.pop();
if (!visited[curr.first])
{
visited[curr.first] = 1;
for (auto it: v[curr.first])
{
if (!visited[it.first] && d[it.first] > d[curr.first] + it.second) ///dp[i] = min (dp[tata] + 1, dp[i])
{
d[it.first] = d[curr.first] + it.second;
//insert_element({it.first, d[it.first]});
pq.push({it.first, d[it.first]});
}
}
}
}
}
int main()
{
f>>n>>m;
for (int i = 0; i < m; ++i)
{
int x, y, cost;
f>>x>>y>>cost;
v[x].push_back({y, cost});
}
for (int i = 2; i <= n; ++i)
d[i] = INT_MAX;
dijkstra();
for (int i = 2; i <= n; ++ i)
if (d[i] == INT_MAX)
g<<"0 ";
else
g<<d[i]<<' ';
g<<'\n';
return 0;
}