Pagini recente » Cod sursa (job #2054870) | Cod sursa (job #2186283) | Cod sursa (job #635025) | Cod sursa (job #2378087) | Cod sursa (job #1638235)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
vector< pair<short,int> > g[30001]; //primul e vecinul, al doilea e distanta pana la vecin
int sate, muchii, x, y, q, w, d, p, u;
struct {
int dist, nod;
} coada[30010];
bool viz[30010];
int main()
{
fin>>sate>>muchii>>x>>y;
for(int i=1;i<=muchii;i++)
{
fin>>q>>w>>d;
g[q].push_back(make_pair(w, d));
g[w].push_back(make_pair(q, d));
}
p=u=1;
coada[1].nod=x;
coada[1].dist=0;
viz[x]=1;
while(coada[p].nod!=y)
{
for(int i=0; i<g[coada[p].nod].size(); i++)
{
coada[++u].nod=g[coada[p].nod][i].first;
if(g[coada[p].nod][i].first>x && g[coada[p].nod][i].first<coada[p].nod)
coada[u].dist=coada[p].dist-g[coada[p].nod][i].second;
else
if(g[coada[p].nod][i].first>x && g[coada[p].nod][i].first>coada[p].nod && coada[p].nod>=x)
coada[u].dist=coada[p].dist+g[coada[p].nod][i].second;
else
if(g[coada[p].nod][i].first<x && g[coada[p].nod][i].first<coada[p].nod && coada[p].nod<=x)
coada[u].dist=coada[p].dist+g[coada[p].nod][i].second;
else
if(g[coada[p].nod][i].first<x && g[coada[p].nod][i].first>coada[p].nod)
coada[u].dist=coada[p].dist-g[coada[p].nod][i].second;
else
if(g[coada[p].nod][i].first<x && g[coada[p].nod][i].first<coada[p].nod)
coada[u].dist=g[coada[p].nod][i].second-coada[p].dist;
else
if(g[coada[p].nod][i].first<x && g[coada[p].nod][i].first<coada[p].nod)
coada[u].dist=g[coada[p].nod][i].second-coada[p].dist;
}
p++;
}
fout<<coada[p].dist;
return 0;
}