Pagini recente » Cod sursa (job #2024805) | Cod sursa (job #332145) | Cod sursa (job #3195887) | Cod sursa (job #758175) | Cod sursa (job #2305514)
#include <iostream>
#include <fstream>
#include <set>
#include <vector>
#define INF 2147483647
#define MAXn 50001
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
vector<pair<int,int> >v[MAXn];
int n,m;
int dist[MAXn];
int main()
{
f>>n>>m;
for(int i=1;i<=m;i++)
{
int from,to,cost;
f>>from>>to>>cost;
v[from].push_back(make_pair(to,cost));
}
for(int i=2;i<=n;i++)
dist[i]=INF;
set< pair<int,int> >s;
s.insert(make_pair(0,1));
while(!s.empty())
{
int nod=s.begin()->second;
int cost=s.begin()->first;
s.erase(s.begin());
vector< pair<int,int> >::iterator it;
for(it=v[nod].begin();it!=v[nod].end();it++)
{
if(it->second + cost<dist[it->first])
{
s.insert(make_pair(it->second + cost,it->first));
if(dist[it->first]!=INF)
s.erase(make_pair(dist[it->first],it->first));
dist[it->first]=it->second + cost;
}
}
}
for(int i=2;i<=n;i++)
g<<(dist[i]==INF? 0 : dist[i])<<' ';
return 0;
}