Pagini recente » Cod sursa (job #2686146) | Cod sursa (job #397560)
Cod sursa(job #397560)
#include<fstream>
#include<iostream>
using namespace std;
#define nn 30005
struct nod
{
int info,dist;
nod *next;
};
nod *g[nn];
int n,m,x,y,D[nn];
void adauga(int a,int b,int d)
{
nod *t=new nod;
t->info=b;
t->dist=d;
t->next=g[a];
g[a]=t;
}
int bfs()
{
int coada[nn];
int v[nn];
int st,dr;
for(int i=1;i<=n;++i)
v[i]=0;
st=dr=1;
coada[st]=x;
v[1]=1;
while(coada[st]!=y&&st<=dr)
{
int k=coada[st];
for(nod *t=g[k] ; t ; t=t->next)
if(!v[t->info])
{
int kk=(coada[++dr]=t->info);
v[t->info]=1;
if(k<kk)
D[kk]=D[k]+t->dist;
else D[kk]=D[k]-t->dist;
if(kk==y)
return D[kk];
}
st++;
//cout<<st<<" "<<coada[st]<<" "<<D[dr]<<" ";
//cin.get();
}
return D[st];
// for(int i=1;i<=n;++i)
// cout<<coada[i]<<" ";
}
int main()
{
int i,j,d;
ifstream fin("sate.in");
fin>>n>>m>>x>>y;
for(;m;--m)
{
fin>>i>>j>>d;
adauga(i,j,d);
adauga(j,i,d);
}
/*for(int i=1;i<=n;++i)
{
cout<<i<<": ";
for(nod *t=g[i];t;t=t->next)
{
cout<<t->info<<"("<<t->dist<<")"<<" ";
}
cout<<endl;
}
*/
d=bfs();
FILE *f=fopen("sate.out","w");
fprintf(f,"%d",d);
return 0;
}