Cod sursa(job #1571134)

Utilizator theodor1289Theodor Amariucai theodor1289 Data 17 ianuarie 2016 11:48:54
Problema Sate Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 2.06 kb
/*
aj=g[curent][i].second>=g[sursa][curent].second? g[curent][i].second-g[sursa][curent].second:g[sursa][curent].second-g[curent][i].second;
g[sursa].push_back(make_pair(g[curent][i].first,g[curent][i].second+g[sursa][curent].second));

*/

#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, sursa, aj, suma, limit, rez;
bool viztot[30001], viz[30001];

int dfs(int curent)
{
    viz[curent]=1;

    for(int i=0;i<g[curent].size();i++)
        if(!viz[g[curent][i].first])
    {
        if(sursa<curent)
        {
        if(g[curent][i].first>curent and g[curent][i].first>sursa)
            suma+=g[curent][i].second;
            else
        if(g[curent][i].first<curent and g[curent][i].first<sursa)
            suma-=g[curent][i].second;
            else
            suma-=g[curent][i].second;
        }
        else
        {
        if(g[curent][i].first>curent and g[curent][i].first>sursa)
            suma-=g[curent][i].second;
            else
        if(g[curent][i].first<curent and g[curent][i].first<sursa)
            suma+=g[curent][i].second;
            else
            suma-=g[curent][i].second;
        }



        g[sursa].push_back(make_pair(g[curent][i].first,suma));
        if(sursa==x and g[curent][i].first==y)
            rez=suma;

        dfs(g[curent][i].first);
    }


    viz[curent]=0;
}

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));
    }

    for(int i=0;i<sate and !rez;i++)
        if(!viz[i])
        {
            viz[i]=1;
            sursa=i;
            limit=g[i].size();
            for(int y=0;y<limit;y++)
            {
                suma=g[sursa][y].second;
                dfs(g[sursa][y].first);
            }
        }

    fout<<rez;
    return 0;
}