Pagini recente » Cod sursa (job #421898) | Cod sursa (job #1900408) | Cod sursa (job #125768) | Cod sursa (job #1290330) | Cod sursa (job #1726708)
#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();
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);
}
}
}
}