Pagini recente » Cod sursa (job #1873749) | Cod sursa (job #2736228) | Cod sursa (job #2974219) | Cod sursa (job #2241635) | Cod sursa (job #271525)
Cod sursa(job #271525)
#include <fstream.h>
#define max 30001
ifstream in("sate.in");
ofstream out("sate.out");
int n,m,x,y,d[max],s[max],st[max];
struct nod{int info,l;
nod *urm;} *VF[max];
void adauga(nod *&prim,int info,int l){
nod *p;
p = new nod;
p->info = info;
p->l = l;
p->urm = prim;
prim = p;
}
void citeste(){
int a,b,l;
in>>n>>m>>x>>y;
while(in>>a>>b>>l){adauga(VF[a],b,l);adauga(VF[b],a,l);}
}
int abs(int x){
if(x<0) return -x;
return x;
}
void parcurge(int x){
nod *p;
int prim,ultim;
prim = ultim = 1;
st[prim] = x;
s[x] = 1;
while(prim <= ultim && !d[y]){
for(p = VF[st[prim]]; p!=NULL;p=p->urm)
if(!s[p->info]){
s[p->info] = 1;
st[++ultim] = p->info;
if(st[prim] > p->info && st[1] < p->info)
d[p->info] = abs(d[st[prim]]-p->l);
if(st[prim] < p->info && st[1]<p->info){
if(st[1] < st[prim]) d[p->info] = d[st[prim]]+p->l;
if(st[1] > st[prim]) d[p->info] = abs(p->l - d[st[prim]]);
}
if(st[prim] > p->info && st[1] > p->info){
if(st[prim] > st[1]) d[p->info] = abs(p->l - d[st[prim]]);
if(st[prim] < st[1]) d[p->info] = d[st[prim]]+p->l;
}
if(st[prim]<p->info && st[1] > p->info)
d[p->info] = abs(d[st[prim]]-p->l);
}
prim++;
}
}
void init(){
for(nod*p=VF[x];p!=NULL;p=p->urm)
d[p->info] = p->l;
}
int main(){
citeste();
init();
parcurge(x);
out<<d[y];
return 0;
}