Pagini recente » Cod sursa (job #699874) | Cod sursa (job #327544) | Monitorul de evaluare | Cod sursa (job #2443183) | Cod sursa (job #865269)
Cod sursa(job #865269)
#include<fstream>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
ifstream f("dijkstra.in"); ofstream g("dijkstra.out");
const int INF = 100000000;
const int NMAX = 50001;
int n, m, sol[NMAX];
struct nod
{
int v;
int c;
nod(){};
nod(int a, int b)
{
v = a;
c = b;
};
};
vector<nod> v[NMAX];
queue<int> q;
inline void read_data();
inline void solve();
inline void write_data();
int main()
{
read_data();
solve();
write_data();
return 0;
}
inline void read_data()
{
f>>n>>m;
int x, y, cost;
for(int i = 1; i <= m; ++i)
{
f>>x>>y>>cost;
v[x].push_back(nod(y, cost));
if(i <= n) sol[i] = INF;
}
f.close();
}
inline void solve()
{
q.push(1);
sol[1] = 0;
while(!q.empty())
{
int x = q.front(); q.pop();
vector<nod> :: iterator it;
for(it = v[x].begin(); it != v[x].end(); ++it)
{
if((*it).c + sol[x] < sol[(*it).v])
{
sol[(*it).v] = (*it).c + sol[x];
q.push((*it).v);
}
}
}
}
inline void write_data()
{
for(int i = 2; i <= n; ++i)
if(sol[i] != INF) g<<sol[i]<<' ';
else
g<<0<<' ';
g<<'\n';
g.close();
}