Pagini recente » Cod sursa (job #1788551) | Cod sursa (job #126877) | Cod sursa (job #2532041) | Cod sursa (job #1121877) | Cod sursa (job #2505865)
#include <iostream>
#include <fstream>
#include <set>
#include <vector>
using namespace std;
const int MAXN = 50041;
const int INF = 0x3f3f3f3f;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m;
struct vecin{
int y;
int cost;
bool operator<(const vecin& other) const
{
if(cost != other.cost)
return cost < other.cost;
return y < other.y;
}
};
vector<vecin>graf[MAXN];
set<vecin>q;
int dmin[MAXN];
void citire()
{
f>>n>>m;
for(int i=0;i<m;i++)
{
int x,y,c;
f>>x>>y>>c;
graf[x].push_back({y,c});
}
}
void rez()
{
for(int i=2;i<=n;i++)
dmin[i] = INF;
q.insert({1,0});
while(!q.empty())
{
int top = q.begin()->y;
q.erase(q.begin());
for(const vecin& v : graf[top])
{
int nouCost = dmin[top] + v.cost;
if(dmin[v.y] > nouCost)
{
if(dmin[v.y] != INF)
q.erase({v.y, dmin[v.y]});
dmin[v.y] = nouCost;
q.insert({v.y, dmin[v.y]});
}
}
}
}
void afisare()
{
for(int i=2;i<=n;i++)
g<<dmin[i]<<" ";
}
int main()
{
citire();
rez();
afisare();
return 0;
}