Cod sursa(job #1194269)

Utilizator varga13VarGaz13 varga13 Data 3 iunie 2014 13:00:59
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.78 kb
//pentru casa. nu-i de citit
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#include <stdlib.h>
#define mx 30000
#define inf 2147483647
using namespace std;

int n,m,x,y, grad[mx];

struct muchie
{
int destinatie;
int cost;
} *Gr[mx];

vector< pair<int,int> > G[mx];
int best[mx];

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

void Initialisation()
{
    for(int i=0;i<mx;i++)
    {
        best[i]=0;
    }
}

void Read()
{
    f>>n>>m>>x>>y;
    Initialisation();
    for(int i=0;i<m;i++)
    {
        int a,b,d;
        f>>a>>b>>d;
        G[a].push_back( make_pair(b,d) );
        G[b].push_back( make_pair(a,-d) );
    }
}

muchie make_muchie(int dest, int cost)
{
    muchie aux;
    aux.destinatie=dest;
    aux.cost=cost;
    return aux;
}

void Read2()
{
    Initialisation();
    f>>n>>m>>x>>y;
    for(int i=0;i<m;i++)
    {
        int a,b,c;
        f>>a>>b>>c;
        grad[a]++;
        grad[b]++;
    }
    for(int i=1;i<=n;i++)
    {
        Gr[i] = (muchie*) malloc(grad[i]*sizeof(muchie) );
        grad[i]=0;
    }
    f.close();
    ifstream f("sate.in");
    f>>n>>m>>x>>y;
    for(int i=0;i<m;i++)
    {
        int a,b,c;
        f>>a>>b>>c;
        Gr[a][grad[b]++]=make_muchie(b,c);
        Gr[b][grad[a]++]=make_muchie(a,-c);
    }
}
int Q[mx], Left, Right;
void BFSit()
{
    Right++;
    Q[Left]=x;
    for(;Left<Right && Q[Left]!=y;Left++)
    {
        int curent=Q[Left];
        for(int i=0; i<grad[curent]; i++)
        {
            if(!best[Gr[curent][i].destinatie])
            {
                best[Gr[curent][i].destinatie]=best[curent]+Gr[curent][i].cost;
              // g<<best[curent]<<' '<<Gr[curent][i].cost<<'\n';

                Q[++Right]=Gr[curent][i].destinatie;
            }
        }
    }

}

void BFS(int curent)
{

    for(int i=0;i<G[curent].size();i++)
    {
        if(best[ G[curent][i].first ]==0)
        {
            best[G[curent][i].first]=best[curent]+G[curent][i].second;
            BFS(G[curent][i].first);
        }
    }
}

int main()
{
    Read2();
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<grad[i];j++)
        {
            g<<i<<' '<<Gr[i][j].destinatie<<' '<<Gr[i][j].cost<<'\n';
        }
        g<<'\n';
    }
    BFSit();

    g<<best[y];
    return 0;
}

/*
int d, best[mx];
    queue<int> Q;

    for(Q.push(x) ; Q.size() ; Q.pop() )
    {
        for(int i=0;i<G[Q.back()].size();i++)//daca nu mere stim unde-i problema
        {
            int val;
            val=( Q.back()<G[Q.back()][i].first() ) ? G[Q.back()][i].second() : -G[Q.back()][i].second();
            best[G[Q.back()][i].first()]=
            Q.push(G[Q.back()][i].first());
        }

    }
*/