Pagini recente » Cod sursa (job #2039898) | Cod sursa (job #2040406) | Cod sursa (job #1849546) | Cod sursa (job #1998484) | Cod sursa (job #343353)
Cod sursa(job #343353)
#include<cstdio>
#include<vector>
using namespace std;
const int N=(1<<15);
int n,m;
short int x0,y0;
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];
int dd[N]={0};
coada[++u]=x0;
dd[x0]=1;
while(p!=1+u)
{
x=coada[p++];
for(i=0,s=a[x].size() ; i<s ; ++i)
{
y=a[x][i];
if(dd[y]==0)
{
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;
}