Pagini recente » Cod sursa (job #687213) | Cod sursa (job #3190293) | Cod sursa (job #2463771) | Cod sursa (job #1983793) | Cod sursa (job #2662261)
#include <bits/stdc++.h>
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
using namespace std;
ifstream f ( "dijkstra.in" );
ofstream g ( "dijkstra.out" );
const int NMAX = 50001, INF = 1 << 29;
int d[NMAX], t[NMAX], n, m;
bool viz[NMAX];
class Comp
{
public:
bool operator() ( const int& a, const int &b )
{
return d[a] > d[b];
}
};
vector<pii>G[NMAX];
priority_queue<int, vector<int>, Comp>Q;
void citire()
{
int x, y, c;
f >> n >> m;
for ( int i = 1; i <= m; i++ )
{
f >> x >> y >> c;
G[x].pb ( mp ( y, c ) );
}
}
void Dijkstra ( int x0 )
{
for ( int i = 1; i <= n; i++ )
{
d[i] = INF;
t[i] = x0;
}
d[x0] = 0;
t[x0] = 0;
viz[x0] = 1;
Q.push ( x0 );
while ( !Q.empty() )
{
int vfmin = Q.top();
Q.pop();
viz[vfmin] = 0;
for ( auto i : G[vfmin] )
{
int ymin = i.first;
int cost = d[vfmin] + i.second;
if ( d[ymin] > cost )
{
d[ymin] = cost;
t[ymin] = vfmin;
if ( !viz[ymin] )
{
Q.push ( ymin );
viz[ymin] = 1;
}
}
}
}
}
void afisare ( int x )
{
for ( int i = 1; i <= n; i++ )
if ( i != x )
{
if ( d[i] != INF )
g << d[i] << ' ';
else g << "0 ";
}
}
int main()
{
citire();
Dijkstra ( 1 );
afisare ( 1 );
return 0;
}