Pagini recente » Borderou de evaluare (job #1532012) | Cod sursa (job #3231714) | Cod sursa (job #2075404) | Cod sursa (job #1404691) | Cod sursa (job #632861)
Cod sursa(job #632861)
#include <fstream>
#include <cstdio>
#include <vector>
using namespace std;
const int N=100001;
const int M=250001;
const int INF=1<<30;
const int PARS=10000;
vector < pair<int,int> > edge[N];
int cost[N],n,m,vizitate,heapsize;
bool viz[N];
char buff[PARS];
int pozitie=PARS-1;
void citire(int &nr){
nr=0;
while(buff[pozitie]<'0' || buff[pozitie]>'9')
if (++pozitie==PARS){
fread (buff,1,PARS,stdin);
pozitie=0;
}
while('0'<=buff[pozitie] && buff[pozitie]<='9'){
nr=nr*10+buff[pozitie]-'0';
if (++pozitie==PARS){
fread (buff,1,PARS,stdin);
pozitie=0;
}
}
}
void Dijkstra(){
int i,costaux,nod,vizitate=0,min;
for(i=2;i<=n;++i){
cost[i]=INF;
}
nod=1;
while(vizitate!=n){
viz[nod]=1;
costaux=cost[nod];
for(i=0;i<edge[nod].size();++i){
if(viz[edge[nod][i].first]==0 && costaux+edge[nod][i].second<cost[edge[nod][i].first])
cost[edge[nod][i].first]=costaux+edge[nod][i].second;
}
min=INF;
for(i=1;i<=n;++i){
if(cost[i]<=min && viz[i]==0){
nod=i;
min=cost[i];
}
}
vizitate++;
}
}
void read(){
int a,b,c;
freopen("dijkstra.in","r",stdin);
citire(n);
citire(m);
for(int i=1;i<=m;i++){
citire(a);
citire(b);
citire(c);
edge[a].push_back(make_pair(b,c));
}
}
void write(){
freopen("dijkstra.out","w",stdout);
for(int i=2;i<=n;++i){
if(cost[i]==INF){
printf("0 ");
continue;
}
printf("%d ",cost[i]);
}
}
int main(){
read();
Dijkstra();
write();
return 0;
}