Pagini recente » Cod sursa (job #1864533) | Cod sursa (job #167545) | Cod sursa (job #1339064) | Cod sursa (job #2038968) | Cod sursa (job #1676232)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
int n, m, y1, y2, x1, x2, dist[30005], nod, D;
struct distanta{
int v, d;
}x, y;
queue <int> C;
vector <distanta> vecin[30005];
int main()
{
ifstream f("sate.in");
ofstream g("sate.out");
f >> n >> m >> y1 >> y2;
for(int i = 1; i <= m; ++i){
f >> x1 >> x2 >> x.d;
x.v = x2;
if(vecin[x1].size() == 0) vecin[x1].push_back(y);
vecin[x1].push_back(x);
vecin[x1][0].v++;
x.v = x1;
if(vecin[x2].size() == 0) vecin[x2].push_back(y);
vecin[x2].push_back(x);
vecin[x2][0].v++;
}
dist[y1] = 1;
C.push(y1);
while(!C.empty()){
nod = C.front();
for(int i = 1; i <= vecin[nod][0].v; ++i)
if(dist[vecin[nod][i].v] == 0){
if(vecin[nod][i].v > nod)
dist[vecin[nod][i].v] = dist[nod] + vecin[nod][i].d;
else dist[vecin[nod][i].v] = dist[nod] - vecin[nod][i].d;
if(vecin[nod][i].v == y2){
g << dist[y2] - 1;
return 0;
}
C.push(vecin[nod][i].v);
}
C.pop();
}
return 0;
}