Pagini recente » Cod sursa (job #2713987) | Cod sursa (job #136388) | Cod sursa (job #301394) | Cod sursa (job #770077) | Cod sursa (job #1096507)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
#define INF 0x3f3f3f3f
vector < pair <int,int> > v[50005];
queue <int> q;
int n,m,nr,x,y,c,negativ,D[50005],viz[50005],U[50005];
bool ok=true;
int main()
{
int i;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=2;i<=n;++i)
D[i]=INF;
q.push(1); viz[1]=1;
for (i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&c);
v[x].push_back(make_pair(y,c));
}
negativ = 0;
while (!q.empty() && !negativ)
{
x=q.front(); q.pop(); viz[x]=0;
for (i=0;i<v[x].size();++i)
if (D[v[x][i].first]>D[x]+v[x][i].second)
{
U[v[x][i].first]++;
if (U[v[x][i].first] == n) {
negativ = 1;
break;
}
D[v[x][i].first]=D[x]+v[x][i].second;
if (!viz[v[x][i].first])
{
q.push(v[x][i].first);
viz[v[x][i].first]=1;
}
}
}
if (negativ)
printf("Ciclu negativ!\n");
else
{
for (i=2;i<=n;++i)
printf("%d ",D[i]);
printf("\n");
}
return 0;
}