Pagini recente » Cod sursa (job #2556786) | Cod sursa (job #2755579) | Cod sursa (job #156470) | Cod sursa (job #2393955) | Cod sursa (job #2403140)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int val[100005];
vector<pair<int,int> > v[50005];
queue<int> q;
int main()
{
int noduri=0,arce=0;
freopen("dijkstra.in","r", stdin);
freopen("dijkstra.out","w", stdout);
scanf("%d %d",&noduri,&arce);
for(int i=1;i<=arce;i++)
{
int a,b,cost;
scanf("%d %d %d",&a,&b,&cost);
// leg de la a la b
v[a].push_back(make_pair(b,cost));
}
for(int i=2;i<=noduri;i++)
val[i]=1<<30;
for(int i=1;i<=noduri;i++)
{
if(v[i].size())// daca am elemente la care sa merg
{
for(int j=0;j<v[i].size();j++)
{
if(val[i]+v[i][j].second < val[v[i][j].first] )//daca ajung cu un drum mai mic
{
val[v[i][j].first]=val[i]+v[i][j].second;
q.push(v[i][j].first);
}
}
while(q.size())
{
int nod=q.front();
q.pop();
if(v[nod].size())
{
for(int k=0;k<v[nod].size();k++)
{
if(val[nod]+v[nod][k].second<val[v[nod][k].first])
{
val[v[nod][k].first]=val[nod]+v[nod][k].second;
q.push(v[nod][k].first);
}
}
}
}
}
}
// printf("1 ");
for(int i=2;i<=noduri;i++)
(val[i]!=1<<30)?printf("%d ",val[i]):printf("0 ");
return 0;
}