Pagini recente » Cod sursa (job #903506) | Cod sursa (job #2919008) | Cod sursa (job #1339768) | Cod sursa (job #741723) | Cod sursa (job #976198)
Cod sursa(job #976198)
#include<cstdio>
#include<vector>
#include<iterator>
#include<utility>
#include<queue>
#define NMAX 50000+5
#define oo 1<<30
using namespace std;
struct cmp
{
bool operator()(pair<int,int> A,pair<int,int> B)
{
return A.second>B.second;
}
};
int N,M,a,b,c,i,j;
int D[NMAX];
vector<pair<int,int> > V[NMAX];
vector<pair<int,int> >::iterator it;
priority_queue<pair<int,int>,vector<pair<int,int> >,cmp> Q;
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&N,&M);
for(;M;--M)
{
scanf("%d%d%d",&a,&b,&c);
V[a].push_back(make_pair(b,c));
}
for(i=2;i<=N;i++) D[i]=oo;
Q.push(make_pair(1,0));
for(;!Q.empty();)
{
a=Q.top().first;
Q.pop();
for(it=V[a].begin();it!=V[a].end();it++)
{
if(D[a]+it->second<D[it->first])
{
D[it->first]=D[a]+it->second;
Q.push(make_pair(it->first,D[it->first]));
}
}
}
for(i=2;i<=N;i++) {if(D[i]==oo) D[i]=0; printf("%d ",D[i]);}
return 0;
}