Pagini recente » Cod sursa (job #330741) | Cod sursa (job #1898327) | Cod sursa (job #2415315) | Cod sursa (job #916745) | Cod sursa (job #1758890)
#include <cstdio>
#include <cstdlib>
#define MAXN 2000
#define MAXM 2000
int u, val[2*MAXM+1], next[2*MAXM+1];
int cost[2*MAXM+2], lista[MAXN+1], s[MAXN+1];
bool viz[MAXN+1];
void dfs(int x){
int p=lista[x];
viz[x]=1;
while(p){
if(viz[val[p]]==0){
s[val[p]]=s[x]+cost[p];
dfs(val[p]);
}else if(s[val[p]]!=s[x]+cost[p]) exit(1);
p=next[p];
}
}
inline void adauga(int x, int y, int z){
u++;
val[u]=y;
cost[u]=z;
next[u]=lista[x];
lista[x]=u;
}
int main(){
int n, m, a, b, c, i;
FILE *fin, *fout;
fin=fopen("reconst.in", "r");
fout=fopen("reconst.out", "w");
fscanf(fin, "%d%d", &n, &m);
for(i=1; i<=m; i++){
fscanf(fin, "%d%d%d", &a, &b, &c);
adauga(a-1, b, c);
adauga(b, a-1, -c);
}
for(i=0; i<=n; i++)
if(viz[i]==0)
dfs(i);
for(i=1; i<=n; i++)
fprintf(fout, "%d ", s[i]-s[i-1]);
fclose(fin);
fclose(fout);
return 0;
}