Pagini recente » Cod sursa (job #2276203) | Cod sursa (job #3226516) | Cod sursa (job #2103519) | Cod sursa (job #2026674) | Cod sursa (job #1712646)
#include <stdio.h>
#include <vector>
#include <queue>
using std::queue;
using std::vector;
typedef struct
{
int nod;
int cost;
} nod_s;
int dist[30001];
vector <nod_s> v[30001];
queue <int> Q;
void bfs(int start)
{
int nodc,i;
dist[start] = 1;
Q.push(start);
while(!Q.empty())
{
nodc = Q.front();
Q.pop();
for(i = 0; i < v[nodc].size(); ++i)
{
if(dist[v[nodc][i].nod] == 0)
{
if(v[nodc][i].nod < nodc)
dist[v[nodc][i].nod] = dist[nodc] - v[nodc][i].cost;
else
dist[v[nodc][i].nod] = dist[nodc] + v[nodc][i].cost;
Q.push(v[nodc][i].nod);
}
}
}
}
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
int i;
int n,m,xstart,xstop;
int s1,s2,scost;
scanf("%d %d %d %d",&n,&m,&xstart,&xstop);
for(i = 1; i <= m; ++i)
{
scanf("%d %d %d",&s1,&s2,&scost);
v[s1].push_back(nod_s {s2,scost});
v[s2].push_back(nod_s {s1,scost});
}
bfs(xstart);
printf("%d\n",dist[xstop] - 1);
return 0;
}