Pagini recente » Cod sursa (job #1692659) | Cod sursa (job #1767899) | Cod sursa (job #3259217) | Cod sursa (job #2189877) | Cod sursa (job #1128494)
#include <fstream>
#include <vector>
#include <queue>
#define mx 50000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m, sol[mx];
vector< pair<int,int> > G[mx];// first==nod || second == cost
queue<int> Proc;
void Initializ(int S)
{
for(int i=1;i<=n;i++)
sol[i]=int(2e11);
sol[S]=0;
}
void Dijkstra(int S)
{
int actual;
Initializ(S);
for(Proc.push(S);Proc.size();Proc.pop())
{
actual=Proc.front();
for(int i=0;i<G[actual].size();i++)
{
if(sol[G[actual][i].first]>sol[actual]+G[actual][i].second)
{
sol[G[actual][i].first]=sol[actual]+G[actual][i].second;
Proc.push(G[actual][i].first);
}
}
}
}
void Read()
{
int S,D,C;
f>>n>>m;
for(int i=0;i<m;++i)
{
f>>S>>D>>C;
G[S].push_back( make_pair(D,C) );
}
}
void Write(int S)
{
for(int i=2;i<=n;++i)
{
if(sol[i]==int(2e11))
g<<0<<' ';
else if(i!=S)
g<<sol[i]<<' ';
}
}
int main()
{
Read();
Dijkstra(1);
Write(1);
f.close();
g.close();
return 0;
}