Pagini recente » Cod sursa (job #2844355) | Cod sursa (job #2358059) | Cod sursa (job #3205032) | Cod sursa (job #1575315) | Cod sursa (job #1068170)
#include<cstdio>
#include<vector>
#include<queue>
#define inf 1<<30
#define NMax 50005
using namespace std;
typedef pair<int,int> VP;
vector<VP> vc[NMax];
int d[NMax],viz[NMax],N,M;
priority_queue<VP, vector<VP>, greater<VP> > Q;
void init ()
{
for (int i=2; i<=N; i++)
d[i]=inf;
}
int main ()
{
int i,x,y,z,nod;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&N,&M);
for (i=1; i<=M; i++)
{
scanf("%d%d%d",&x,&y,&z);
vc[x].push_back(make_pair(y,z));
}
init();
Q.push(make_pair(0,1));
while (!Q.empty())
{
nod=Q.top().second;
Q.pop();
viz[nod]=1;
vector<VP>::iterator it;
for (it=vc[nod].begin(); it!=vc[nod].end(); ++it)
if (!viz[it->first] && d[it->first]>d[nod]+it->second)
{
d[it->first]=d[nod]+it->second;
Q.push(make_pair(d[it->first],it->first));
}
}
for (i=2; i<=N; i++)
printf("%d ",(d[i]==inf) ? 0 : d[i]);
return 0;
}