Pagini recente » Cod sursa (job #851716) | Cod sursa (job #2549223) | Cod sursa (job #1687735) | Cod sursa (job #1760109) | Cod sursa (job #2191835)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#define pb push_back
#define ll long long
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct par
{
int nod;
ll len;
};
class compar
{
public:
bool operator()(par a, par b)
{
return a.len > b.len;
}
};
const int NMAX = 5e4 + 10;
const int MMAX = 25e4 + 10;
int n, m;
par p;
int x, y, len;
vector < par > v[NMAX];
int er[NMAX];
int main()
{
fin >> n >> m;
for(int i = 0; i < m; ++i)
{
fin >> x >> y >> len;
p.len = len;
/*
p.nod = x;
v[y].pb(p);
*/
p.nod = y;
v[x].pb(p);
}
for(int i = 0; i <= n; ++i)
er[i] = 0;
int cnod = 1;
priority_queue < par, vector<par>, compar> q;
for(int k = 1; k < n; ++k)
{
for(int i = 0; i < v[cnod].size(); ++i)
{
p = v[cnod][i];
p.len += er[cnod];
q.push(p);
}
do
{
p = q.top();
if(er[p.nod] != 0)
q.pop();
}while(er[p.nod] != 0 && q.size());
if(!q.size())
break;
cnod = p.nod;
er[cnod] = p.len;
q.pop();
}
for(int i = 2; i <= n; ++i)
fout << er[i] << " ";
return 0;
}