Cod sursa(job #1074608)

Utilizator cdascaluDascalu Cristian cdascalu Data 7 ianuarie 2014 19:36:28
Problema Sate Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.5 kb
#include<fstream>
#define URMAT v[0][ v[1][coada[0][prim]] ]
#define LOCURMAT v[1][ v[1][coada[0][prim]] ]
#define MAX 230049
using namespace std;
int v[3][MAX],n,m,x,y,cont,coada[2][MAX],prim,ultim;
void add(int x,int y,int d)
{
    if(!v[0][x])
    {
        v[1][x] = cont;
    }
    else
    {
        v[1][v[0][x]] = cont;
    }
    v[0][x] = cont;
    v[0][cont] = y;
    v[2][cont] = d;
}
int main()
{
    ifstream f("sate.in");
    f>>n>>m>>x>>y;
    int i,j,d,k;
    cont = n+1;
    for(k=1;k<=m;++k,++cont)
    {
        f>>i>>j>>d;
        add(i,j,d);
        ++cont;
        add(j,i,d);
    }
    f.close();
    prim = 1;
    coada[0][prim] = x;
    ultim = 2;
    int var;
    while(prim!=ultim)
    {
        while(v[1][coada[0][prim]])
        {
            if(v[1][ URMAT ])
            {              
            var = URMAT;
            coada[0][ultim] = var;
            coada[1][ultim] = coada[1][prim];
            if(var < coada[0][prim])
                coada[1][ultim] -= v[2][ v[1][coada[0][prim]] ];
            else coada[1][ultim] += v[2][ v[1][coada[0][prim]] ];
             
            if(var == y)
            {
                ofstream g("sate.out");
                g<<coada[1][ultim];
                g.close();
                return 0;
                 
            }
            ++ultim;
            }
            v[1][coada[0][prim]] = LOCURMAT;
             
        }
        ++prim;
    }
    /*FILE*g = fopen("sate.out","w");
    fprintf(g,"%d\n",min);
    fclose(g);*/
    return 0;
}