Pagini recente » Cod sursa (job #2848205) | Cod sursa (job #2172370) | Cod sursa (job #605252) | Cod sursa (job #377100) | Cod sursa (job #1894726)
#include<fstream>
#include<set>
#include<vector>
#define NMAX 50005
#define infinit 150000000000
using namespace std;
set<pair<long long, long long> > s;
vector<pair<long long, long long> > G[NMAX];
long long nod, i, val, fiu, d[NMAX], n, m, x, y, z;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
void dijkstra()
{
while(!s.empty())
{
nod = s.begin() -> second;
s.erase(*s.begin());
for(i = 0; i < G[nod].size(); i++)
{
val = G[nod][i].first;
fiu = G[nod][i].second;
if(d[nod] + val < d[fiu])
{
if(s.find(make_pair(d[fiu], fiu)) != s.end())
s.erase(make_pair(d[fiu], fiu));
d[fiu] = d[nod] + val;
s.insert(make_pair(d[fiu], fiu));
}
}
}
}
int main()
{
cin >> n >> m;
for(i = 1; i <= m; i++)
{
cin >> x >> y >> z;
G[x].push_back(make_pair(z, y));
//G[y].push_back(make_pair(z, x));
}
for(i = 1; i <= n; i++)
{
d[i] = infinit;
}
d[1] = 0;
s.insert(make_pair(0, 1));
dijkstra();
for(i = 2; i <= n; i++)
{
d[i] != infinit ? cout << d[i] << " " : cout << "0 ";
}
return 0;
}