Pagini recente » Cod sursa (job #862971) | Cod sursa (job #3140308) | Cod sursa (job #1354878) | Cod sursa (job #1424035) | Cod sursa (job #699136)
Cod sursa(job #699136)
# include <cstdio>
# include <vector>
using namespace std;
struct date
{
int c, n;
};
vector <int> muchie[50001], cost[500001];
date coada[500005];
int n, m, a, b, c, in, sf, nod;
char fr[500001];
int main ()
{
freopen ("dijkstra.in","r",stdin);
freopen ("dijkstra.out","w",stdout);
scanf ("%d%d", &n, &m);
for (int i=1; i <= m; i++)
{
scanf("%d%d%d", &a, &b, &c);
muchie[a].push_back (b);
cost[a].push_back (c);
}
coada[0].c = 0;
coada[0].n = 1;
fr[1] = 1;
for ( ; in <= sf ; in ++)
{
nod = coada[in].n;
fr[nod] = 0;
for (int i = 0; i < muchie[nod].size (); i++)
if ( fr[muchie[nod][i]] == 0)
{
coada[++sf].c = coada[in].c + cost[nod][i];
coada[sf].n = muchie[nod][i];
fr[muchie[nod][i]]=1;
}
else
for (int j=in; j<=sf; j++)
if( muchie[nod][i] == coada[j].n)
if (coada[j].c > (coada[in].c + cost[nod][i]))
coada[j].c = coada[in].c + cost[nod][i];
}
for (int i=1; i <= sf; i ++)
if (fr[coada[i].n] > coada[i].c || fr[coada[i].n]== 0 || fr[coada[i].n] == 1)
fr[coada[i].n] = coada[i].c;
for (int i=2; i<=n; i++)
printf ("%d ", fr[i]);
return 0;
}