Pagini recente » Istoria paginii utilizator/mateivlad | Monitorul de evaluare | Cod sursa (job #1052040) | Cod sursa (job #1380166) | Cod sursa (job #133338)
Cod sursa(job #133338)
#include <stdio.h>
#include <vector>
#include <bitset>
using namespace std;
long n,m,x,y,a,b,c,p,q,i,dim,ok,nod;
long l[60000],cl[60000];
vector <long>v[30002];
vector <long>cost[30002];
bool mark[30002];
int main(){
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%ld %ld %ld %ld",&n,&m,&x,&y);
for (i=1;i<=m;i++){
scanf("%ld %ld %ld",&a,&b,&c);
v[a].push_back(b);
cost[a].push_back(c);
v[b].push_back(a);
cost[b].push_back(c);
}
p=1;q=1;
l[1]=x;
mark[x]=1;
cl[1]=0;
while (p<=q){
dim=v[l[p]].size();
for (i=0;i<dim;i++){
nod=v[l[p]][i];
if (!mark[nod]){
mark[nod]=1;
q++;
l[q]=nod;
if (l[p]<nod)
cl[q]=cl[p]+cost[l[p]][i];
else
cl[q]=cl[p]-cost[l[p]][i];
if (nod==y){ok=1;break;}
}
}
if (ok){printf("%ld\n",cl[q]);return 0;}
p++;
}
return 0;
}