Pagini recente » Cod sursa (job #2268890) | Cod sursa (job #2079115) | Cod sursa (job #1292369) | Cod sursa (job #2436092) | Cod sursa (job #3120976)
#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<=m; i++)
{
f>>st>>dr>>c;
v[st].vec.push_back({dr, c});
}
for(int i = 2; i<=n; i++)
{
d[i] = INF;
}
s.insert({0, 1});
/*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 dist, nd;
while(!s.empty())
{
dist = (*s.begin()).first;
nd = (*s.begin()).second;
s.erase(s.begin());
for(int i = 0; i<v[nd].vec.size(); i++)
{
int to = v[nd].vec[i].first;
int cost = v[nd].vec[i].second;
if(d[to] > d[nd] + cost)
{
if(d[to] != INF)
{
s.erase(s.find({d[to], to}));
}
d[to] = cost + d[nd];
s.insert({d[to], to});
}
}
}
for(int i = 2; i<=n; i++)
{
if(d[i] == INF)
{
g<<0<<" ";
}
else
{
g<<d[i]<<" ";
}
}
return 0;
}