Pagini recente » Cod sursa (job #1941719) | Cod sursa (job #1026445) | Istoria paginii utilizator/filestraffff | Cod sursa (job #2928540) | Cod sursa (job #967554)
Cod sursa(job #967554)
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <bitset>
#include <queue>
#include <deque>
#include <list>
#include <set>
#include <ctime>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream ff("bellmanford.in");
ofstream gg("bellmanford.out");
#define max 50001
#define inf 0xffffff
struct per{ int b,c; per(int b0=0,int c0=0){b=b0; c=c0;}};
vector<per> vv[max];
queue<int> qq[2];
int ww[max];
int n, m, dd[max];
void bel(){
int x0=0, x1=1, x, y, c, l;
for(int i=1;i<=n;i++) dd[i]=inf;
dd[1]=0;
qq[x0].push(1);
for(int k=1;k<=n;k++){
memset(ww, 0, sizeof(ww));
while(qq[x0].size()>0){
x=qq[x0].front(); qq[x0].pop();
l=vv[x].size();
for(int i=0;i<l;i++){
y=vv[x][i].b;
c=vv[x][i].c;
if(dd[y]>dd[x]+c){
dd[y]=dd[x]+c;
if(ww[y]!=k){qq[x1].push(y);ww[y]=k;}
}
}
}
x0^=1; x1^=1;
}
if((int)qq[x0].size()>0) gg << "Ciclu negativ!"; else
for(int i=2;i<=n;i++) gg << dd[i] << " ";
}
int main(){
int a, b, c;
ff >> n >> m;
for(int i=0;i<m;i++){
ff >> a >> b >> c;
vv[a].push_back(per(b,c));
}
bel();
return 0;
}