Pagini recente » Cod sursa (job #2171760) | Cod sursa (job #2226419) | Cod sursa (job #854041) | Cod sursa (job #81694) | Cod sursa (job #2990879)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
#define infinite 100000000
#define nmax 30005
int d[nmax];
int i,j,k1,k2,k3,vecin,cost,nodcurent,n,m,x,y;
vector < pair <int, int> > a[nmax];
queue <int> coada;
void bfs()
{
while(coada.empty()==0)
{
nodcurent=coada.front(); coada.pop();
for(i=0;i<a[nodcurent].size();i++)
{
vecin=a[nodcurent][i].first;
cost=a[nodcurent][i].second;
if(d[nodcurent]+cost<d[vecin] && vecin>nodcurent)
{
if(d[vecin]==infinite)
coada.push(vecin);
d[vecin]=d[nodcurent]+cost;
}
else if (vecin<nodcurent && d[vecin]>d[nodcurent]-cost)
{
if(d[vecin]==infinite)
coada.push(vecin);
d[vecin]=d[nodcurent]-cost;
}
}
}
}
int main()
{
f>>n>>m>>x>>y;
for(i=1;i<=m;i++)
{
f>>k1>>k2>>k3;
a[k1].push_back(make_pair(k2,k3));
a[k2].push_back(make_pair(k1,k3));
}
for(i=1;i<=n;i++)
d[i]=infinite;
d[x]=0; coada.push(x);
bfs();
g<<d[y];
return 0;
}