Pagini recente » Cod sursa (job #910627) | Cod sursa (job #2881376) | Cod sursa (job #1554679) | Cod sursa (job #2293841) | Cod sursa (job #1339836)
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
#include <limits>
#define INF numeric_limits<int>::max()
#define mp make_pair
#define pb push_back
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector< vector< pair<int,int> > > a;
priority_queue< pair<int,int> > q; //coada afurisita
vector<int> d;
int n;
void dijkstra(int st)
{
d[st]=0;
q.push(mp(0,st));//introduc nodul in multime
while(!q.empty())
{
int x=q.top().second;
q.pop();
for(vector< pair<int,int> >::iterator i=a[x].begin();i!=a[x].end();i++)//parcurg adiacentele lui x
if(d[x] + i->second < d[i->first])
{
d[i->first]=d[x] + i->second;
q.push(mp(-d[i->first],i->first)); // bag negativ, ca pr e max heap
}
}
}
void citire()
{
int m,x,y,z;
in>>n>>m;
a=vector< vector< pair<int,int> > >(n+1);
d=vector<int>(n+1,INF);
for(;m;m--)
{
in>>x>>y>>z;
a[x].pb(mp(y,z));
}
}
void afisare()
{
for(int i=2;i<=n;i++)
{
if(d[i]==INF)d[i]=0;
out<<d[i]<<' ';
}
}
int main()
{
citire();
dijkstra(1);
afisare();
return 0;
}