Pagini recente » Cod sursa (job #1805289) | Cod sursa (job #1218512) | Istoria paginii runda/20_februarie_simulare_oji_2024_clasa_9/clasament | Cod sursa (job #1052374) | Cod sursa (job #1465018)
#include <iostream>
#include <fstream>
#include <utility>
#include <set>
#include <vector>
#define NMAX 50001
#define INF 2000
#define nod first
#define cost second
using namespace std;
vector< pair<int,int> > a[NMAX];
set<pair<int,int> > heap;
int n,m,x,y,c,d[NMAX];
void dijakstra()
{
int nod,cost;
heap.insert(make_pair(1,0));
while(!heap.empty())
{
nod = (*heap.begin()).nod;
cost = (*heap.begin()).cost;
heap.erase(heap.begin());
for(int i=0;i<a[nod].size();i++)
{
if(d[ a[nod][i].nod ] > cost + a[nod][i].cost )
{
d[ a[nod][i].nod ] = cost + a[nod][i].cost;
heap.insert(make_pair(a[nod][i].nod,d[a[nod][i].nod]));
}
}
}
}
int main()
{
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
in >> n >> m;
//cout << n;
for(int i=0;i<m;i++)
{
in >> x >> y >> c;
a[x].push_back(make_pair(y,c));
}
for(int i=2;i<=n;i++)
d[i] = INF;
dijakstra();
for(int i=2;i<=n;i++)
{
if(d[i]==INF)
out << 0 << " ";
else
out << d[i] << " ";
}
return 0;
}