Pagini recente » Cod sursa (job #634864) | Cod sursa (job #2496483) | Cod sursa (job #1824366) | Cod sursa (job #20127) | Cod sursa (job #3120967)
#include <fstream>
#include <set>
#include <vector>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct nod
{
vector <pair<int, int>> vec;
};
nod v[50005];
int d[50005];
multiset <pair<int, int>> s;
int n, m;
int main()
{
int INF = (1 << 30) - 1;
f>>n>>m;
int st, dr, c;
for(int i = 1; i<=n; i++)
{
f>>st>>dr>>c;
v[st].vec.push_back({dr, c});
}
for(int i = 2; i<=n; i++)
{
d[i] = INF;
}
for(int i = 0; i<v[1].vec.size(); i++)
{
d[v[1].vec[i].first] = v[1].vec[i].second;
s.insert({v[1].vec[i].second, v[1].vec[i].first});
}
int cost, nd;
while(!s.empty())
{
cost = (*s.begin()).first;
nd = (*s.begin()).second;
s.erase(s.begin());
for(int i = 0; i<v[nd].vec.size(); i++)
{
if(d[v[nd].vec[i].first] > cost + v[nd].vec[i].second)
{
if(d[v[nd].vec[i].first] != INF)
{
s.erase(s.find({d[v[nd].vec[i].first], v[nd].vec[i].first}));
}
d[v[nd].vec[i].first] = cost + v[nd].vec[i].second;
s.insert({d[v[nd].vec[i].first], v[nd].vec[i].first});
}
}
}
for(int i = 2; i<=n; i++)
{
if(d[i] == INF)
{
g<<0<<" ";
}
else
{
g<<d[i]<<" ";
}
}
return 0;
}