Pagini recente » Cod sursa (job #1014890) | Cod sursa (job #1925894) | Cod sursa (job #1712741) | Cod sursa (job #2225189) | Cod sursa (job #1194512)
#include <cstdio>
#include <vector>
#include <set>
#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 <int> gr[MAX];
vector <short int> cost[MAX];
set <P> graph;
void dijkstra(){
graph.insert(mp(1,0));
while(graph.size()>0){
int val=(*graph.begin()).s;
int x=(*graph.begin()).f;
graph.erase(*graph.begin());
for(int i=0;i<(int)gr[x].size();++i)
if(d[gr[x][i]]>val+cost[x][i]){
d[gr[x][i]]=val+cost[x][i];
graph.insert(mp(gr[x][i],d[gr[x][i]]));
}
}
}
int main()
{
int n,m;
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){
int x,y,val;
scanf("%d%d%d",&x,&y,&val);
gr[x].pb(y);
cost[x].pb(val);
}
dijkstra();
for(int i=2;i<=n;++i)printf("%d ",d[i]==INF?0:d[i]);
printf("\n");
return 0;
}