Pagini recente » Cod sursa (job #2848410) | Cod sursa (job #268896) | Cod sursa (job #2496096) | Cod sursa (job #2833402) | Cod sursa (job #2949312)
#include <fstream>
#include <queue>
#include <vector>
#include <iostream>
#include <limits.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int NMAX = 50000;
typedef pair<int, int> pi;
int in;
bool visited[NMAX + 5];
long long shortest[NMAX + 5];
int N, M;
int a, b, c;
vector <int> g[NMAX + 5];
vector <int> v[NMAX + 5];
priority_queue <pi, vector<pi>, greater<pi>> pq;
void dijkstra(int curr_length, int src)
{
for(int i = 0; i < g[src].size(); i++)
{
if(!visited[g[src][i]])
{
if(curr_length + v[src][i] < shortest[g[src][i]])
{
shortest[g[src][i]] = curr_length + v[src][i];
pq.push(make_pair(shortest[g[src][i]], g[src][i]));
}
}
}
}
int main()
{
fin >> N >> M;
for(int i = 0; i <= N; i++)
shortest[i] = INT_MAX;
for(int i = 1; i <= M; i++)
{
fin >> a >> b >> c;
g[a].push_back(b);
v[a].push_back(c);
g[b].push_back(a);
v[b].push_back(c);
}
//prima e lungimea de la sursa, a doua este nodul
pq.push({0, 1});
while(!pq.empty())
{
visited[pq.top().second] = 1;
dijkstra(pq.top().first, pq.top().second);
pq.pop();
if(!pq.empty())
while(visited[pq.top().second] == 1)
pq.pop();
}
for(int i = 2; i <= N; i++)
{
if(shortest[i] == INT_MAX)
fout << "0 ";
else
fout << shortest[i] << " ";
}
fin.close();
fout.close();
return 0;
}