Pagini recente » Cod sursa (job #38851) | Cod sursa (job #2318044) | Cod sursa (job #1562184) | Cod sursa (job #174620) | Cod sursa (job #2048136)
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
#define NMAX 50005
#define INF (1<<30)
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct nod{
int vf;
int cost;
};
class cmp{
public:
bool operator()(nod a, nod b){
return a.cost > b.cost;
};
};
vector <nod> v[NMAX];
priority_queue <nod, vector<nod>, cmp> h;
int n,m;
int d[NMAX];
bool viz[NMAX];
nod make_nod(int x, int c)
{
nod z;
z.vf=x, z.cost=c;
return z;
}
void citire(){
int x,y,cost;
fin>>n>>m;
for(int i=1;i<=m;i++){
fin>>x>>y>>cost;
v[x].push_back(make_nod(y,cost));
}
}
void Dijkstra(int s){
h.push(make_nod(s,0));
viz[s]=1;
while(!h.empty()){
nod z=h.top();
h.pop();
for(unsigned int i=0;i<v[z.vf].size();i++){
int x=v[z.vf][i].vf;
int cost=v[z.vf][i].cost;
if(viz[x]==0 && d[x]>z.cost+cost){
d[x]=z.cost+cost;
viz[x]=1;
h.push(make_nod(x,d[x]));
}
}
}
}
int main(){
citire();
for(int i=2;i<=n;i++)
d[i]=INF;
Dijkstra(1);
for(int i=2;i<=n;i++)
if(d[i]==INF)
fout<<0<<" ";
else
fout<<d[i]<<" ";
return 0;
}