Pagini recente » Cod sursa (job #2141538) | Cod sursa (job #69825) | Cod sursa (job #2581859) | Cod sursa (job #403161) | Cod sursa (job #1861721)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
int n,m,x,y,s,d,c;
int cs[30001];
bool viz[30001];
queue<int> q;
struct sat
{
vector<int> vecini;
vector<int> cost;
} a[30001];
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d %d %d %d",&n,&m,&x,&y);
if(x>y)
{
int t=y;
y=x;
x=t;
}
for(int i=1;i<=m;i++)
{
scanf("%d %d %d",&s,&d,&c);
if(s>d)
{
int t=d;
d=s;
s=t;
}
a[s].vecini.push_back(d);
a[s].cost.push_back(c);
a[d].vecini.push_back(s);
a[d].cost.push_back(-c);
}
q.push(x);
int current;
while(!q.empty())
{
current=q.front();
q.pop();
int vc;
int dst;
while(!a[current].vecini.empty())
{
vc=a[current].vecini.back();
dst=a[current].cost.back();
if(viz[vc]==0)
{
viz[vc]=1;
cs[vc]=cs[current]+dst;
q.push(vc);
}
a[current].vecini.pop_back();
a[current].cost.pop_back();
}
}
printf("%d",cs[y]);
}