Pagini recente » Cod sursa (job #2769830) | Cod sursa (job #597740) | Cod sursa (job #2442892) | Cod sursa (job #2957519) | Cod sursa (job #198643)
Cod sursa(job #198643)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
struct query {
int A, B, S;
};
const int MAX_N = 2005;
const int MAX_Q = 2005;
const int UNKNOWN = 2000000001;
ifstream in("reconst.in");
ofstream out("reconst.out");
int N, M;
query Q[MAX_Q];
vector <int> L[MAX_N];
int sum[MAX_N];
int main() {
in >> N >> M;
for(int i = 0; i < M; ++i) {
in >> Q[i].A >> Q[i].B >> Q[i].S;
--Q[i].A;
L[Q[i].A].push_back(i);
L[Q[i].B].push_back(i);
}
for(int i = 0; i <= N; ++i)
sum[i] = UNKNOWN;
queue <int> C;
for(int i = 0; i <= N; ++i)
if(sum[i] == UNKNOWN) {
sum[i] = 0;
C.push(i);
while(!C.empty()) {
int j = C.front();
C.pop();
for(vector <int> :: iterator it = L[j].begin(); it != L[j].end(); ++it)
if(j == Q[*it].A) {
if(sum[Q[*it].B] == UNKNOWN) {
sum[Q[*it].B] = sum[j] + Q[*it].S;
C.push(Q[*it].B);
}
}
else {
if(sum[Q[*it].A] == UNKNOWN) {
sum[Q[*it].A] = sum[j] - Q[*it].S;
C.push(Q[*it].A);
}
}
}
}
for(int i = 1; i <= N; ++i)
out << sum[i] - sum[i - 1] << " ";
return 0;
}