Pagini recente » Cod sursa (job #2615852) | Cod sursa (job #1422713) | Cod sursa (job #2457000) | Cod sursa (job #2916051) | Cod sursa (job #1857307)
#include<bits/stdc++.h>
using namespace std;
typedef struct tip
{
int a,b,d;
};
tip v[200035];
bool comp(tip a,tip b)
{
if(a.a<b.a) return 1;
if(a.a==b.a && a.b<b.b) return 1;
return 0;
}
deque<int> q;
int n,m,x,y,z,st,dr,sol,mid;
int cost[30005];
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&x,&y);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&v[i].a,&v[i].b,&v[i].d);
}
for(int i=1;i<=m;i++)
{
v[i+m].a=v[i].b;
v[i+m].b=v[i].a;
v[i+m].d=-v[i].d;
}
sort(v+1,v+(2*m)+1,comp);
cost[v[1].a]=1;
for(int i=1;i<=n;i++)
{
if(cost[i])
{
q.push_back(i);
while(!q.empty())
{
z=q.front();
st=1;
dr=2*m;
sol=0;
while(st<=dr)
{
mid=(st+dr)>>1;
if(v[mid].a==z)
{
sol=mid;
dr=mid-1;
}
else
if(v[mid].a>z)
{
dr=mid-1;
}
else
st=mid+1;
}
while(sol<=(2*m) && v[sol].a==z)
{
if(!cost[v[sol].b])
{
cost[v[sol].b]=cost[z]+v[sol].d;
q.push_back(v[sol].b);
}
sol++;
}
q.pop_front();
}
}
}
printf("%d\n",cost[y]-cost[x]);
return 0;
}