Pagini recente » Cod sursa (job #2523462) | Cod sursa (job #220624) | Cod sursa (job #3159339) | Cod sursa (job #2978489) | Cod sursa (job #613137)
Cod sursa(job #613137)
#include <vector>
#include <fstream>
#include <queue>
using namespace std;
#define pb push_back
const int INF = 500000000;
const int NMAX = 50005;
const char Input[] = "dijkstra.in";
const char Output[] = "dijkstra.out";
class state
{
public:
int nod,cost;
state(int nod,int cost)
{
this->nod = nod;
this->cost = cost;
}
};
class comparer
{
public:
bool operator()(state s1,state s2)
{
return s1.cost < s2.cost;
}
};
vector<int> g[NMAX],c[NMAX];
priority_queue<state,vector<state>,comparer> H;
int N,M,dmin[NMAX];
void read()
{
int i,e1,e2,cost;
freopen(Input,"r",stdin);
scanf("%d %d",&N,&M);
for(i=1; i<=M; i++)
{
scanf("%d %d %d",&e1,&e2,&cost);
g[e1].pb(e2);
c[e1].pb(cost);
}
}
void dijkstra()
{
state s = state(1,0);
int nod , cost,i;
H.push(s);
for(i=1; i<=N; i++)
dmin[i] = INF;
while(!H.empty()){
s = H.top();
H.pop();
nod = s.nod;
cost = s.cost;
for(i=0; i<g[nod].size(); i++)
if(dmin[g[nod][i]] > cost + c[nod][i])
{
dmin[g[nod][i]] = cost + c[nod][i];
s = state(g[nod][i],dmin[g[nod][i]]);
H.push(s);
}
}
}
int main()
{
read();
dijkstra();
freopen(Output,"w",stdout);
int i;
for(i=2; i<=N; i++)
printf("%d ",(dmin[i] == INF)?0:dmin[i]);
return 0;
}