Pagini recente » Cod sursa (job #1852064) | Cod sursa (job #2099713) | Cod sursa (job #852846) | Cod sursa (job #667482) | Cod sursa (job #1194516)
#include <cstdio>
#include <vector>
#include <queue>
#define pb push_back
#define mp make_pair
#define f first
#define s second
const int MAX = 50100;
const int INF = 1<<30;
using namespace std;
int d[MAX];
typedef pair<int,int> P;
vector <P> gr[MAX];
bool incoada[MAX];
void dijkstra(){
queue<int> q;
q.push(1);
d[1]=0;
incoada[1]=1;
while(!q.empty()){
int fata=q.front();
q.pop();
incoada[fata]=0;
for(vector <P> ::iterator it=gr[fata].begin();it!=gr[fata].end();++it){
if(d[fata]+it->s<d[it->f]){
d[it->f]=d[fata]+it->s;
if(!incoada[it->f]){
incoada[it->f]=1;
q.push(it->f);
}
}
}
}
}
int main()
{
int n,m;int x,y,val;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=2;i<=n;++i)d[i]=INF;
for(int i=1;i<=m;++i){
scanf("%d%d%d",&x,&y,&val);
gr[x].pb(mp(y,val));
}
dijkstra();
for(int i=2;i<=n;++i)printf("%d ",d[i]==INF?0:d[i]);
printf("\n");
return 0;
}