Pagini recente » Cod sursa (job #820500) | Cod sursa (job #2060332) | Cod sursa (job #643320) | Cod sursa (job #1342144) | Cod sursa (job #1726711)
#include <fstream>
#include <vector>
#include <cstdio>
#include <queue>
#include <map>
#include <set>
#define NMAX 30005
using namespace std;
int n , m , st , en , x , y , cst , i , nr , node , it , cost;
int dp[NMAX];
bool c[NMAX];
vector <vector <pair <int , int> > > G;
queue <int> coada;
void bfs();
void read(int &x) {
int sign = 1;
char ch;
x = 0;
while (!isdigit(ch = getchar())) {
if (ch == '-') {
sign = -1;
}
else
sign = 1;
}
do {
x = x * 10 + ch - '0';
} while (isdigit(ch = getchar()));
x *= sign;
}
int main() {
freopen("sate.in" , "r" , stdin);
freopen("sate.out" ,"w" , stdout);
read(n) , read(m) , read(st) , read(en);
G.resize(n + 5);
for (i = 1; i <= m; ++i) {
read(x) , read(y) , read(cst);
G[x].push_back(make_pair(y , cst));
G[y].push_back(make_pair(x , -cst));
}
bfs();
printf("%d" , dp[en]);
return 0;
}
void bfs() {
coada.push(st);
c[st] = 1;
while (!coada.empty()) {
node = coada.front();
coada.pop();
if(node == en) {
return;
}
c[node] = 1;
nr = G[node].size();
for (i = 0; i < nr; ++i) {
it = G[node][i].first;
cost = G[node][i].second;
if (c[it] == 0) {
dp[it] = dp[node] + cost;
coada.push(it);
}
}
}
}