Pagini recente » Cod sursa (job #1435378) | Cod sursa (job #1746214) | Cod sursa (job #1644178) | Cod sursa (job #2740536) | Cod sursa (job #182771)
Cod sursa(job #182771)
# include <stdio.h>
# include <vector>
using namespace std;
# define input "sate.in"
# define output "sate.out"
# define max 30001
int coada[max],u[max];
int start, finish;
int i,j,n,m,x,y,d;
int res;
int dist[max];
vector <int> v[max],dis[max],semn[max];
int main()
{
freopen(input,"r", stdin);
freopen(output,"w", stdout);
scanf("%d%d%d%d",&n,&m,&start,&finish);
for(i = 0 ; i < m; i++)
{
scanf("%d%d%d",&x,&y,&d);
v[x].push_back(y);
dis[x].push_back(d);
semn[x].push_back(1);
v[y].push_back(x);
dis[y].push_back(d);
semn[y].push_back(-1);
}
coada[0] = start;
dist[0] = 0;
res = -1;
u[start] = 1;
int st,dr;
for(st = dr = 0; st <= dr; st++)
{
i = coada[st];
d = dist[st];
for(j = 0; j < v[i].size(); j++)
{
if(!u[v[i][j]])
{
u[v[i][j]] = 1;
coada[++dr] = v[i][j];
dist[dr] = d+dis[i][j] * semn[i][j];
if(coada[dr] == finish)
{
printf("%d ",dist[dr]);
return 0;
}
}
}
}
printf("%d ",res);
return 0;
}