Pagini recente » Profil CanabizzzLife | Cod sursa (job #2236146) | Cod sursa (job #1727436) | Monitorul de evaluare | Cod sursa (job #777543)
Cod sursa(job #777543)
#include <fstream>
#include <queue>
#define N 50010
#define PI pair<int, int>
#define nod first
#define cost second
#define INF 999999999
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct QueueCompare
{
bool operator () (const PI &a, const PI &b) const
{
return a.cost>b.cost;
}
};
priority_queue <PI, vector<PI>, QueueCompare> Q;
vector<PI> A[N];
int n,m,i,j,ANS[N],a,b,c;
int main ()
{
f >> n >> m;
for (i=1; i<=n; i++)
ANS[i]=INF;
for (i=1; i<=m; i++)
{
f >> a >> b >> c;
A[a].push_back(make_pair(b,c));
}
ANS[1]=0;
Q.push(make_pair(1,0));
int nod,cost;
while (!Q.empty())
{
nod=Q.top().nod;
cost=Q.top().cost;
Q.pop();
if (cost>ANS[nod]) continue;
for (i=0; i<A[nod].size(); i++)
{
cost=ANS[nod]+A[nod][i].cost;
if (cost<ANS[A[nod][i].nod])
{
ANS[A[nod][i].nod]=cost;
Q.push(make_pair(A[nod][i].nod,ANS[A[nod][i].nod]));
}
}
}
for (i=2; i<=n; i++)
g << (ANS[i]<INF?ANS[i]:0) << ' ';
g << '\n';
f.close();
g.close();
return 0;
}