Cod sursa(job #1032826)

Utilizator pintilie.andreiPintilie pintilie.andrei Data 16 noiembrie 2013 09:37:08
Problema Sate Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <vector>
#define NMAX 30010

using namespace std;

FILE *fin,*fout;

vector <int> M[NMAX];//costuri
vector <int> N[NMAX];//noduri
int n,m,x,y,use[NMAX],C[NMAX];

void BFS(int);

int main()
{
    int i,a,b,c;
    fin=fopen("sate.in","r");
    fout=fopen("sate.out","w");
    fscanf(fin,"%d%d%d%d",&n,&m,&x,&y);
    for(i=1;i<=m;i++)
    {
        fscanf(fin,"%d%d%d",&a,&b,&c);
            M[a].push_back(c);
            N[a].push_back(b);
            M[b].push_back(-c);
            N[b].push_back(a);
    }
    BFS(x);
    fprintf(fout,"%d\n",use[y]);
    return 0;
}

void BFS(int start)
{
    int ic=0,sc=0,i,val,det;
    C[ic]=start;
    use[start]=0;
    while(ic<=sc)
    {
        val=C[ic];
        ic++;
        det=M[val].size();
        for(i=0;i<det;i++)
        {
            sc++;
            C[sc]=N[val][i];
            use[N[val][i]]=use[val]+M[val][i];
            if(N[val][i]==y)
            {
                ic=sc+1;
                break;
            }
        }
    }
}