Cod sursa(job #863946)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 24 ianuarie 2013 13:47:47
Problema Sate Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#include<vector>
#include<queue>
#define NMAX 30010

using namespace std;

ifstream f("sate.in");
ofstream g("sate.out");

int n, m, x, y, d[NMAX], vz[NMAX];

struct muchie
{
    int nod, cost;
};

vector<muchie> a[NMAX];

queue<int> q;

void Citeste()
{
    int i, X, Y;
    muchie z;

    f>>n>>m>>x>>y;

    for (i=1; i<=n; ++i)
    {
        f>>X>>Y>>z.cost;
        z.nod=Y; a[X].push_back(z);
        z.nod=X; a[Y].push_back(z);
    }
}

void Solve(int nod)
{
    int i;
    muchie z;

    q.push(nod); vz[nod]=1;

    while (!q.empty())
    {
        nod=q.front(); q.pop();

        for (i=0; i<a[nod].size(); ++i)
        {
            z=a[nod][i];
            if (!vz[z.nod])
            {
                if (z.nod<nod)
                {
                    d[z.nod]=d[nod]-z.cost;
                    vz[z.nod]=1; q.push(z.nod);
                }
                else
                {
                    d[z.nod]=d[nod]+z.cost;
                    vz[z.nod]=1; q.push(z.nod);
                }
            }
        }
    }

    g<<d[y]<<"\n";
}

int main()
{
    Citeste();
    Solve(x);
    f.close();
    g.close();
    return 0;
}