Pagini recente » Cod sursa (job #2375120) | Cod sursa (job #1391583) | Cod sursa (job #2526155) | Cod sursa (job #317462) | Cod sursa (job #1705392)
#include <iostream>
#include <vector>
#include <queue>
#include <stdio.h>
#include <string.h>
void bfs(int s, int dist[], std::vector<std::pair<int, int> > g[], int n, int km[]) {
std::queue<int> q;
bool visited[n + 1];
memset(visited, false, sizeof(bool) * (n + 1));
q.push(s);
visited[s] = true;
while (!q.empty()) {
int node = q.front();
q.pop();
for (unsigned int i = 0; i < g[node].size(); i++) {
if (!visited[g[node][i].first]) {
visited[g[node][i].first] = true;
q.push(g[node][i].first);
dist[g[node][i].first] = dist[node] + 1;
if (g[node][i].first < node) {
km[g[node][i].first] = km[node] - g[node][i].second;
}
else {
km[g[node][i].first] = km[node] + g[node][i].second;
}
}
}
}
}
int main() {
int n, m, x, y, u, v, cost;
FILE* fin = fopen("sate.in", "r");
FILE* fout = fopen("sate.out", "w");
fscanf(fin, "%d %d %d %d", &n, &m, &x, &y);
std::vector<std::pair<int, int> > g[n + 1];
for (int i = 1; i <= m; i++) {
fscanf(fin, "%d %d %d", &u, &v, &cost);
g[u].push_back(std::make_pair(v, cost));
g[v].push_back(std::make_pair(u, cost));
}
fclose(fin);
int dest = g[x][0].first;
int par = x;
int dist[n + 1];
memset(dist, 0, sizeof(int) * (n + 1));
int km[n + 1];
memset(km, 0, sizeof(int) * (n + 1));
bfs(x, dist, g, n, km);
fprintf(fout, "%d", km[y]);
}