Pagini recente » Cod sursa (job #1482271) | Istoria paginii runda/oni2006runda2 | Cod sursa (job #285763) | Cod sursa (job #2631940) | Cod sursa (job #1819314)
# include <iostream>
# include <fstream>
# include <vector>
# include <queue>
using namespace std;
struct path
{
int dest, dist;
path( int _dest, int _dist )
{
dest = _dest;
dist = _dist;
}
};
# define MAX_N 50000
vector<path> v[1 + MAX_N];
int dist[1 + MAX_N];
# define undefined 1000000000
class cmp
{
public:
bool operator()( path a, path b )
{
return a.dist > b.dist;
}
};
priority_queue<path, vector<path>, cmp> dix;
int main()
{
ifstream fin( "dijkstra.in" );
ofstream fout( "dijkstra.out" );
ios::sync_with_stdio( false );
int n, m, i, a, b, c;
fin >> n >> m;
for ( i = 1; i <= n; i ++ )
dist[i] = undefined;
for ( i = 0; i < m; i ++ ) {
fin >> a >> b >> c;
v[a].push_back( path( b, c ) );
}
dix.push( path( 1, 0 ) );
while ( dix.size() ) {
path t = dix.top();
dix.pop();
if ( dist[t.dest] == undefined ) {
dist[t.dest] = t.dist;
for ( path i : v[t.dest] )
dix.push( path( i.dest, i.dist + t.dist ) );
}
}
for ( i = 2; i <= n; i ++ )
fout << dist[i] << ' ';
fout << endl;
fin.close();
fout.close();
return 0;
}