Pagini recente » Istoria paginii utilizator/kissanna | Cod sursa (job #615860) | Cod sursa (job #1211164) | Cod sursa (job #1702593) | Cod sursa (job #606890)
Cod sursa(job #606890)
# include <fstream>
# include <vector>
# include <queue>
using namespace std;
ifstream f ("sate.in");
ofstream g ("sate.out");
vector <int> A[30001], B[30001];
int n, m, X, Y, x, y, cost, dmin[30001];
queue <int> Q;
char s[50];
int ind;
void BFs (int X)
{
Q.push (X);
for (; !Q.empty (); Q.pop ())
{
int ret = Q.front (), siz = A[ret].size ();
for (int i = 0; i < siz; ++i)
{
if (!dmin[A[ret][i]])
{
dmin[A[ret][i]] = dmin[ret] + B[ret][i];
Q.push (A[ret][i]);
}
if (A[ret][i] == Y)
{
g << dmin[A[ret][i]] << '\n';
return ;
}
}
}
}
int take_number ()
{
int ret = 0;
while (s[ind] >= '0' && s[ind] <= '9')
ret = ret * 10 + s[ind] - '0', ++ind;
++ind;
return ret;
}
int main ()
{
f.getline (s, 48);
n = take_number ();
m = take_number ();
X = take_number ();
Y = take_number ();
for (int i = 1; i <= m; ++i)
{
f.getline (s, 48);
ind = 0;
x = take_number ();
y = take_number ();
cost = take_number ();
A[x].push_back (y);
B[x].push_back (cost);
A[y].push_back (x);
B[y].push_back (cost * (-1));
}
BFs (X);
g.close ();
return 0;
}