Pagini recente » Cod sursa (job #91365) | Cod sursa (job #3280297) | Cod sursa (job #2539571) | Cod sursa (job #280920) | Cod sursa (job #633021)
Cod sursa(job #633021)
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<queue>
#define FIN "sate.in","r",stdin
#define FOUT "sate.out","w",stdout
#define NMAX 30005
using namespace std;
int n,m,xx,yy,x,y,i,j,cost,ok,sol;
vector < vector < pair < int, int> > >a(NMAX);
queue < pair <int,int> >q;
vector<int> v(NMAX,0);
pair <int, int> cif;
vector <pair <int, int> > ::iterator it;
vector <int>lg(NMAX,0);
void read()
{
freopen(FIN);
scanf("%d %d %d %d",&n,&m,&xx,&yy);
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&x,&y,&cost);
a[x].push_back(make_pair(y,cost));
a[y].push_back(make_pair(x,-cost));
}
}
void bfs(int nod)
{
q.push(make_pair(nod,0));
v[nod]=1;
ok=1;
while(!q.empty()&&ok)
{
cif=q.front();
q.pop();
for(it=a[cif.first].begin();it!=a[cif.first].end()&&ok;++it)
{
if(!v[(*it).first])
{
v[(*it).first]=1;
lg[(*it).first]=cif.second+(*it).second;
q.push(make_pair((*it).first,lg[(*it).first]));
}
if((*it).first==yy)ok=0,sol=lg[yy];
}
}
}
void write()
{
freopen(FOUT);
printf("%d",sol);
}
int main()
{
read();
bfs(xx);
write();
return 0;
}