Pagini recente » Cod sursa (job #1595956) | Cod sursa (job #1587914) | Cod sursa (job #3220840) | Cod sursa (job #170800) | Cod sursa (job #628814)
Cod sursa(job #628814)
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
struct edge
{int x, d;};
vector<edge> eg[30000];
int d[30000];
queue<edge> q;
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
int n,i,j,k,m,x,y;
edge cv,altcv;
scanf("%d%d%d%d",&n,&m,&x,&y);
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&cv.x,&k,&cv.d);
eg[k].push_back(cv);
j=cv.x;
cv.x=k;
eg[j].push_back(cv);
}
k=eg[x].size();
d[x]=-1;
for(i=0;i<k;++i)
{
q.push(eg[x][i]);
d[eg[x][i].x]=eg[x][i].d;
}
while(!q.empty())
{
cv=q.front();
j=eg[cv.x].size();
for(i=0;i<j;++i)
{
altcv.x=eg[cv.x][i].x;
if(cv.x<altcv.x)
altcv.d=cv.d+eg[cv.x][i].d;
else
altcv.d=cv.d-eg[cv.x][i].d;
if(altcv.d<d[altcv.x]||d[altcv.x]==0)
{
if(altcv.x!=y)
q.push(altcv);
d[altcv.x]=altcv.d;
}
}
q.pop();
}
printf("%d\n",d[y]);
return 0;
}