Pagini recente » Cod sursa (job #1522) | Cod sursa (job #1689090) | Cod sursa (job #2322652) | Cod sursa (job #1479797) | Cod sursa (job #1676437)
#include <fstream>
#include <queue>
#include <vector>
#include <deque>
using namespace std;
int n, m, y1, y2, x1, x2, dist[30002], nod, D;
struct distanta{
int v, d;
}x, y;
queue <int> C;
vector <distanta> vecin[30002];
int main()
{
//ifstream f("sate.in");
//ofstream g("sate.out");
freopen("sate.in" , "r", stdin);
freopen("sate.out", "w", stdout);
scanf("%d%d%d%d", &n, &m, &y1, &y2);
//f >> n >> m >> y1 >> y2;
for(int i = 1; i <= m; ++i){
scanf("%d%d%d", &x1, &x2, &x.d);
//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){
printf("%d", dist[y2] - 1);
//g << dist[y2] - 1;
return 0;
}
C.push(vecin[nod][i].v);
}
C.pop();
}
return 0;
}