Pagini recente » civilizatie | Cod sursa (job #361246) | Cod sursa (job #2357769) | Cod sursa (job #193047) | Cod sursa (job #553318)
Cod sursa(job #553318)
#include<stdio.h>
#include<limits.h>
#include<vector>
#include<queue>
using namespace std;
#define nrn 30005
#define inf INT_MAX
struct nod{int nr,val;};
vector<nod>V[nrn];
queue<int>Q;
int n,D[nrn];
FILE *in=fopen("sate.in","r"),*out=fopen("sate.out","w");
int main()
{
int x,y,c,m,pas,i,a,b;
nod p;
fscanf(in,"%d %d %d %d",&n,&m,&x,&y);
for(i=1;i<=m;++i)
{
fscanf(in,"%d %d %d",&a,&b,&c);
p.nr=a;
p.val=c;
V[b].push_back(p);
p.nr=b;
V[a].push_back(p);
}
for(i=1;i<=n;++i)
D[i]=inf;
Q.push(x);
D[x]=0;
while(!Q.empty())
{
pas=Q.front();
Q.pop();
for(i=0;i<V[pas].size();++i)
{
p=V[pas][i];
if(p.nr<pas&&D[p.nr]>D[pas]-p.val)
{
D[p.nr]=D[pas]-p.val;
Q.push(p.nr);
}
if(p.nr>pas&&D[p.nr]>D[pas]+p.val)
{
D[p.nr]=D[pas]+p.val;
Q.push(p.nr);
}
}
}
fprintf(out,"%d\n",D[y]);
return 0;
}