Pagini recente » Borderou de evaluare (job #1783339) | Borderou de evaluare (job #1007997) | Borderou de evaluare (job #3044660) | Borderou de evaluare (job #791875) | Cod sursa (job #1192410)
#include<cstdio>
#include<vector>
#include<queue>
#define x first
#define y second
using namespace std;
#define Mmax 50001
vector< pair<int,int> > a[Mmax];
pair<int,int> aux1;
vector<int> d(Mmax,1<<30) ;
vector<bool> viz(Mmax,false);
queue<int> q;
int n,m,z,nod,cost,aux,aa,bb;
void dijkstra(){
q.push(1);
d[1]=0;
while(!q.empty()){
aux=q.front();q.pop();
viz[aux]=0;
for(vector< pair<int,int> >::iterator it=a[aux].begin(); it!=a[aux].end(); it++) {
cost=it->y; nod=it->x;
if(d[nod]>d[aux]+cost) {
d[nod]=d[aux]+cost;
if(!viz[nod]){
q.push(nod);
viz[nod]=true;
}
}
}
}
}
int main() {
freopen("dijkstra.in","rt",stdin);
freopen("dijkstra.out","wt",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&aa,&bb,&z);
a[aa].push_back(make_pair(bb,z));
a[bb].push_back(make_pair(aa,z));
}
dijkstra();
for(int i=2; i<=n;i++){
printf("%d ", d[i] == 1<<30? 0 : d[i]);
}
printf("\n");
return 0;
}