Pagini recente » Cod sursa (job #1146119) | Cod sursa (job #2356714) | Cod sursa (job #1554847) | Cod sursa (job #120945) | Cod sursa (job #411897)
Cod sursa(job #411897)
#include <stdio.h>
#include <queue>
#include <vector>
using namespace std;
const int Infinit = 0x3f3f3f;
const int N = 50010;
struct lol
{
int inf,c;
};
vector <lol> V[N];
int cost[N],n,m,viz[N];
struct cmp
{
bool operator()(const int &a,const int &b) const
{
return cost[a]<cost[b];
}
};
priority_queue <int ,vector<int> , cmp> Q;
void citire()
{
int a;
lol x;
scanf ("%d %d",&n,&m);
for (int i=0;i<m;i++)
{
scanf ("%d %d %d",&a,&x.inf,&x.c);
V[a].push_back(x);
}
}
void dijkstra()
{
for (int i=2;i<=n;i++)
cost[i]=Infinit;
viz[1]=1;
Q.push(1);
int top,topC;
while (!Q.empty())
{
top=Q.top();
Q.pop();
topC=cost[top];
viz[top]=0;
for (int i=0;i<V[top].size();i++)
if (cost[V[top][i].inf] > topC + V[top][i].c)
{
cost[V[top][i].inf] = topC + V[top][i].c;
if (!viz[V[top][i].inf])
{
viz[V[top][i].inf]=1;
Q.push(V[top][i].inf);
}
}
}
for (int i=2;i<=n;i++)
printf("%d ",cost[i]==Infinit?0:cost[i]);
}
int main ()
{
freopen ("dijkstra.in","r",stdin);
freopen ("dijkstra.out","w",stdout);
citire();
dijkstra();
return 0;
}