Pagini recente » Cod sursa (job #856137) | Cod sursa (job #1493993) | Cod sursa (job #2369625) | Cod sursa (job #2312170) | Cod sursa (job #1759455)
#include <stdio.h>
#include <vector>
#define maxn 30005
#define maxm 100005
std::vector <int> vecin[maxn],dist[maxn];
int lg[maxn],lista[maxn];
int main(){
FILE *fin,*fout;
fin=fopen("sate.in","r");
fout=fopen("sate.out","w");
int i,n,m,s,f,st,dr,x,y,d;
fscanf(fin,"%d%d%d%d",&n,&m,&s,&f);
for(i=1;i<=m;i++){
fscanf(fin,"%d%d%d",&x,&y,&d);
vecin[x].push_back(y);
dist[x].push_back(d);
vecin[y].push_back(x);
dist[y].push_back(d);
}
st=1;
dr=1;
lista[st]=s;
lg[s]=1;//fiecare lungime va fi cu 1 mai mult
while(st<=dr){
m=vecin[lista[st]].size();
for(i=0;i<m;i++){
if(lg[vecin[lista[st]][i]]==0){
dr++;
lista[dr]=vecin[lista[st]][i];
if(vecin[lista[st]][i]<lista[st])
lg[vecin[lista[st]][i]]=lg[lista[st]]-dist[lista[st]][i];
else
lg[vecin[lista[st]][i]]=lg[lista[st]]+dist[lista[st]][i];
}
}
st++;
}
fprintf(fout,"%d",lg[f]-1);
fclose(fin);
fclose(fout);
return 0;
}