Pagini recente » Cod sursa (job #298162) | Cod sursa (job #523784) | Cod sursa (job #2559355) | Cod sursa (job #275977) | Cod sursa (job #1400601)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
int n,m,x,y;
vector < vector < pair < int, long long > > > v;
vector < long long > cost;
vector < bool > inq;
queue < int > q;
const long long INF = (1ll<<63)-1;
void init()
{
v.resize(n+1);
cost.resize(n+1,INF);
inq.resize(n+1,false);
}
void citire()
{
in>>n>>m>>x>>y;
init();
int i,a,b,c;
for(i=1;i<=m;i++)
{
in>>a>>b>>c;
v[a].push_back(make_pair(b,c));
v[b].push_back(make_pair(a,-c));
}
}
void rezolvare()
{
int nod;
vector < pair < int, long long > >::iterator it;
q.push(x);
inq[x]=true;
cost[x]=0;
while(q.size())
{
nod=q.front();
for(it=v[nod].begin();it!=v[nod].end();it++)
{
if(cost[it->first]>cost[nod]+it->second)
{
cost[it->first]=cost[nod]+it->second;
if(!inq[it->first])
q.push(it->first);
}
}
inq[nod]=false;
q.pop();
}
}
void afisare()
{
out<<cost[y];
}
int main()
{
citire();
rezolvare();
afisare();
return 0;
}