Pagini recente » Cod sursa (job #2525457) | Cod sursa (job #808496) | Cod sursa (job #2367173) | Cod sursa (job #537220) | Cod sursa (job #894266)
Cod sursa(job #894266)
#include<fstream>
#include<queue>
#include<vector>
#include<utility>
#include<algorithm>
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define NN 50009
#define INF 0x3f3f3f3f
using namespace std;
ofstream out("dijkstra.out");
int n , m ;
vector< pair < int , int > > G[NN];
typedef vector < pair < int , int > >:: iterator IT;
vector<int>dist;
struct comp
{
bool operator()
( int i , int j )
{
return dist[i] < dist[j];
}
};
priority_queue< int , vector < int > , comp >Q;
void read();
void Dijkstra( int root );
void wrs();
int main()
{
read();
Dijkstra(1);
wrs();
return 0;
}
void read()
{
ifstream in("dijkstra.in");
in >> n >> m;
for( int x , y , cost ; m ; --m )
{
in >> x >> y >> cost;
G[x].pb( mp ( y , cost ) );
G[y].pb( mp ( x, cost ) );
}
}
void Dijkstra( int root )
{
dist.assign( n + 1 , INF );
dist[ root ] = 0;
Q.push( root );
int k ;
while ( !Q.empty() )
{
k = Q.top();
Q.pop();
int val = dist[k];
for( IT i = G[k].begin(); i != G[k].end(); ++i )
{
int son = i->f;
int muchie = i->s;
if ( dist[son] > val + muchie )
{
dist[ son ] = val + muchie;
Q.push( son );
}
}
}
}
void wrs()
{
for( int i=2 ;i<=n ; i++)
if ( dist[i] == INF )
out << 0 << " " ;
else
out << dist[i] << " ";
}