Cod sursa(job #1638235)

Utilizator theodor1289Theodor Amariucai theodor1289 Data 7 martie 2016 21:57:17
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#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;
}