Pagini recente » Cod sursa (job #1859019) | Cod sursa (job #2040846) | Cod sursa (job #2284391) | Cod sursa (job #548830) | Cod sursa (job #1700738)
#include <cstring>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
const int mod = 45001;
char temp[3000];
int n, m, i, j, X, Y, x, y, c, l, semn, nr;
vector <int> ls[30005], lc[30005];
int d[30005], st, dr, coada[mod], nviz;
bool viz[30005];
int main()
{
// Parsez citirea.
f.getline(temp, sizeof(temp));
l = strlen(temp);
nviz = 0;
semn = 1;
for (i = 0; i < l;)
{
if (temp[i] == ' ')
nviz++, i++;
else if ((temp[i] >= '0' && temp[i] <= '9') || temp[i] == '-')
{
semn = 1, nr = 0;
if (temp[i] == '-')
semn = -1, i++;
while (temp[i] >= '0' && temp[i] <= '9')
nr = nr * 10 + temp[i] - '0', i++;
if (nviz == 0) n = nr;
else if (nviz == 1) m = nr;
else if (nviz == 2) X = nr;
else if (nviz == 3) Y = nr;
}
}
for (;m;m--)
{
f.getline(temp, sizeof(temp));
l = strlen(temp);
nviz = 0;
semn = 1;
for (i = 0; i < l;)
{
if (temp[i] == ' ')
nviz++, i++;
else if ((temp[i] >= '0' && temp[i] <= '9') || temp[i] == '-')
{
semn = 1, nr = 0;
if (temp[i] == '-')
semn = -1, i++;
while (temp[i] >= '0' && temp[i] <= '9')
nr = nr * 10 + temp[i] - '0', i++;
if (nviz == 0) x = nr;
else if (nviz == 1) y = nr;
else if (nviz == 2) c = nr;
}
}
// Adaug in lista de adiacenta.
ls[x].push_back(y);
lc[x].push_back(c);
ls[y].push_back(x);
lc[y].push_back(c);
}
// Rezolv problema propriu-zisa.
coada[0] = X;
while (st <= dr)
{
x = coada[st%mod];
st++;
for (i = 0; i < ls[x].size(); i++)
{
y = ls[x][i];
if (viz[y] == 0)
{
viz[y] = 1;
if (y > x)
d[y] = d[x] + lc[x][i];
else
d[y] = d[x] - lc[x][i];
if (y == Y)
{
g << d[y];
return 0;
}
dr++;
coada[dr%mod] = y;
}
}
}
return 0;
}