Pagini recente » Cod sursa (job #2576811) | Cod sursa (job #3184781) | Cod sursa (job #2348004) | Istoria paginii runda/usu2 | Cod sursa (job #3260101)
#include <fstream>
#include <vector>
#include <set>
#include <queue>
#define pii pair<int,int>
using namespace std;
ifstream cin ("bellmanford.in");
ofstream cout ("bellmanford.out");
long long int t,n,i,j,k,m,x,y,a,b,c,d[300005],ok[300005],u,v,w,sum,l,r,mini,nr,maxi,node,it;
const int MOD=1e9+7;
vector<pair<int,int>>g[300005];
set<pair<int,int>>s;
priority_queue < pii , vector < pii > , greater < pii > > pq;
queue<int>q;
void bellmanford()
{
for(i=1;i<=n;i++)
d[i]=1e9;
d[1]=0;
ok[1]=1;
q.push(1);
while(q.size() && it<=(n-1)*m)
{
int curr=q.front();
q.pop();
ok[curr]=0;
for(auto x:g[curr])
{
int cost=x.first;
int vec=x.second;
if(d[curr]+cost<d[vec])
{
d[vec]=d[curr]+cost;
if(ok[vec]==0)
{
q.push(vec);
ok[vec]=1;
}
}
}
it++;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>n>>m;
for(i=1; i<=m; i++)
{
cin>>u>>v>>c;
g[u].push_back({c,v});
}
bellmanford();
for(i=1;i<=n;i++)
{
for(auto x:g[i])
if(d[i]+x.second<d[x.first])
{
cout<<"Ciclu negativ!";
return 0;
}
}
for(i=2;i<=n;i++)
cout<<d[i]<<' ';
return 0;
}