Pagini recente » Cod sursa (job #2707462) | Cod sursa (job #3238702) | Cod sursa (job #1744070) | Cod sursa (job #2628354) | Cod sursa (job #2976164)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
vector<pair<int, int> > x[100001];
int D[30001];
struct Data{
int a, d;
};
struct C{
bool operator()(Data a, Data b)
{if(a.d<b.d)return 1;
return 0;
}
};
queue<Data> q;
void F(int a, int b)
{q.push({a, 0});
D[a]=0;
while(q.empty()!=1)
{Data d=q.front();
vector<pair<int, int> >:: iterator I;
for(I=x[d.a].begin();I<x[d.a].end();I++)
{int v=I->first, c=I->second;
if(I->first<d.a)c*=-1;
if(D[v]>d.d+c)
{D[v]=d.d+c;
q.push({v, D[v]});
}
}
q.pop();
}
}
int main()
{ int n, m, a, b, c, a1, b1;
fin>>n>>m>>a1>>b1;
for(int i=1;i<=m;i++)
{fin>>a>>b>>c;
x[a].push_back({b, c});
x[b].push_back({a, c});
}
if(a1>b1)swap(a1, b1);
fill(D+1, D+1+n, 100000000);
F(a1, b1);
if(D[b1]<0)D[b1]*=-1;
fout<<D[b1];
return 0;
}