Pagini recente » Cod sursa (job #3262598) | Cod sursa (job #1480027) | Cod sursa (job #751280) | Cod sursa (job #139271) | Cod sursa (job #779175)
Cod sursa(job #779175)
#include<cstdio>
#include<list>
using namespace std;
int N,M,X,Y,i,j,D,k,anfang,ende,abstand,found;
struct coada {int dist; int name;};
coada queue[400005];
int viz[30001];
struct village {int nod; int cost;};
list<village> L[30001];
list<village>::iterator it;
village q;
int main()
{freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d %d %d %d",&N,&M,&X,&Y);
for(k=1; k<=M; k++)
{scanf("%d %d %d",&i,&j,&D);
village v1,v2;
v1.nod=j; v1.cost=D;
v2.nod=i; v2.cost=D;
L[i].push_back(v1);
L[j].push_back(v2);}
anfang=1; ende=1;
queue[1].name=X;
viz[1]=1;
while(anfang<=ende)
{for(it=L[queue[anfang].name].begin(); it!=L[queue[anfang].name].end(); it++)
{q=*it;
if(viz[q.nod]==0)
{viz[q.nod]=1;
ende++;
queue[ende].name=q.nod;
if(queue[anfang].name<queue[ende].name)
queue[ende].dist=queue[anfang].dist+q.cost;
else
queue[ende].dist=queue[anfang].dist-q.cost;
if(q.nod==Y)
{found=queue[ende].dist;
break;}
}
}
anfang++;
}
printf("%d",found);
return 0;}