Pagini recente » Cod sursa (job #3177615) | Cod sursa (job #2176204) | Cod sursa (job #2062204) | Cod sursa (job #270638) | Cod sursa (job #2853263)
#include <bits/stdc++.h>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
#define m(i,j) la[i].v[j].first
#define val(i,j) la[i].v[j].second
#define lsize(x) la[x].v.size()
const int N=5e4+5,INF=0x3F3F3F3F;
struct graf
{
vector <pair<int,int> > v; // nod & cost
bool parcurs;
} la[N];
int dist[N];
void dijkstra(int n)
{
for(int i=2; i<=n; i++)
dist[i]=INF;
dist[1]=0;
set<pair<int,int> >dij;
dij.insert(make_pair(1,0));
while(!dij.empty())
{
int nod=dij.begin()->first;
int d=dij.begin()->second;
dij.erase(dij.begin());
for(int i=0;i<lsize(nod);i++)
{
int to=m(nod,i);
int cost=val(nod,i);
if(dist[nod]+cost<dist[to])
{
if(dist[to]!=INF) dij.erase(dij.find( make_pair(to,dist[to]) ));
dist[to]=dist[nod]+cost;
dij.insert(make_pair(to,dist[to]));
}
}
}
}
int main()
{
int n,m;
in>>n>>m;
for(int i=1; i<=m; i++)
{
int a,b,c;
in>>a>>b>>c;
la[a].v.push_back(make_pair(b,c));
}
dijkstra(n);
for(int i=2; i<=n; i++)
{
if(dist[i]==INF)
dist[i]=0;
out<<dist[i]<<' ';
}
return 0;
}