Pagini recente » Cod sursa (job #2393611) | Cod sursa (job #3212261) | Clasament infinity-2022-8 | Cod sursa (job #431972) | Cod sursa (job #1347701)
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
int n,m,x,y,tata[2][31000],coada[31000],dimc,startc,viz[31000];
struct nod
{
int nr;
struct nod *urm=NULL;
int d;
};
struct nod *v[31000];
void introd(int start, int nod, int dist)
{
struct nod *p;
p=v[start];
if(v[start]==NULL)
{
p=(struct nod*)malloc(sizeof(struct nod));
p->urm=NULL;
p->d=dist;
p->nr=nod;
v[start]=p;
}
else{
p=(struct nod*)malloc(sizeof(struct nod));
p->urm=v[start];
v[start]=p;
p->nr=nod;
p->d=dist;
}
}
void bf(int nd)
{
viz[nd]=1;
if(v[nd]){
struct nod *p;
for(p=v[nd]; p; p=p->urm)
{
if(viz[p->nr]==0){ viz[p->nr]=1;
dimc++; coada[dimc]=p->nr;
tata[0][p->nr]=nd;
tata[1][p->nr]=p->d;
}
}
startc++;
if(startc<=dimc)bf(coada[startc]);
}
}
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d %d %d %d",&n,&m,&x,&y);
int aa,bb,cc;
for(int i=1; i<=m; i++)
{
scanf("%d %d %d",&aa,&bb,&cc);
introd(aa,bb,cc);
introd(bb,aa,cc);
}
bf(x);
int st=y;
int dis=0;
while(st!=x)
{
if(tata[0][st]<st){dis+=tata[1][st]; st=tata[0][st]; }
else{ dis-=tata[1][st]; st=tata[0][st]; }
}
cout<<dis;
return 0;
}