Pagini recente » Cod sursa (job #1337121) | Cod sursa (job #1814725) | Cod sursa (job #1241938) | Cod sursa (job #474006) | Cod sursa (job #343344)
Cod sursa(job #343344)
#include<cstdio>
#include<vector>
using namespace std;
const int N=(1<<15);
int n,m;
short int x0,y0;
int dd[N];
vector<int> d[N];
vector<short int> a[N];
void citire()
{
short int x,y;
int dist,i;
char sir[22];
scanf("%d%d%hd%hd\n",&n,&m,&x0,&y0);
while(m--)
{
fgets(sir,22,stdin);
for(i=0,x=0 ; sir[i]!=' ' ;++i)
x=x*10+sir[i]-'0';
++i;
for(y=0 ; sir[i]!=' ' ; ++i)
y=y*10+sir[i]-'0';
++i;
for(dist=0 ; sir[i]!='\n' ; ++i)
dist=dist*10+sir[i]-'0';
a[x].push_back(y);
a[y].push_back(x);
d[x].push_back(dist);
d[y].push_back(dist);
}
}
int CL()
{
short int i,s,p=1,u=0,x,y,coada[N];
coada[++u]=x0;
dd[x0]=1;
while(p<=u)
{
x=coada[p++];
for(i=0,s=a[x].size() ; i<s ; ++i)
{
y=a[x][i];
if(dd[y]==0)
{
if(x<y)
dd[y]=dd[x]+d[x][i];
else
dd[y]=dd[x]-d[x][i];
coada[++u]=y;
if(y==y0)
return dd[y]-1;
}
}
}
return -1;
}
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
citire();
printf("%d\n",CL());
return 0;
}