Pagini recente » Cod sursa (job #1148165) | Cod sursa (job #2445522) | Cod sursa (job #2770908) | Cod sursa (job #431994) | Cod sursa (job #908185)
Cod sursa(job #908185)
#include<cstdio>
#include<vector>
#include<queue>
#define NMAX 50005
#define INF (1<<30)
using namespace std;
vector < pair<int,int> > G[NMAX];
int n,d[NMAX],k;
priority_queue< pair<int,int> > HEAP;
bool use[NMAX];
void dijkstra(int nod)
{
int vec,cost;
for(int i=1;i<=n;i++)
d[i]=INF;
d[nod]=0;
HEAP.push(make_pair(0,nod));
while(!HEAP.empty())
{
nod=HEAP.top().second;
HEAP.pop();
if(use[nod])
continue;
use[nod]=1;
for(size_t i=0;i<G[nod].size();i++)
{
vec=G[nod][i].first;
cost=G[nod][i].second;
if(d[vec]>d[nod]+cost)
{
d[vec]=d[nod]+cost;
HEAP.push(make_pair(d[vec],vec));
}
}
}
}
void read()
{
freopen("dijkstra.in","r",stdin);
int x,y,z,m;
scanf("%d %d",&n,&m);
while(m--)
{
scanf("%d %d %d",&x,&y,&z);
G[x].push_back(make_pair(y,z));
}
fclose(stdin);
}
void print()
{
freopen("dijkstra.out","w",stdout);
for(int i=2;i<=n;i++)
printf("%d ",d[i]!=INF?d[i]:0);
fclose(stdout);
}
int main()
{
read();
dijkstra(1);
print();
return 0;
}