Cod sursa(job #1032848)

Utilizator Maxim97Maxim Andrei Maxim97 Data 16 noiembrie 2013 09:57:45
Problema Sate Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <vector>
#include <cstdio>
using namespace std;

FILE *in,*o;

int n,m,x,y;
vector<int>M[30010];
vector<int>N[30010];
int C[200000];
int use[30010];
int c;
void cit()
{
    int i,x1,y1,d;
    in=fopen("sate.in","r");
    fscanf(in,"%d%d%d%d",&n,&m,&x,&y);
    for(i=1;i<=n;i++)
    {
        fscanf(in,"%d%d%d",&x1,&y1,&d);
        M[x1].push_back(d);
        N[x1].push_back(y1);
        M[y1].push_back(-d);
        N[y1].push_back(x1);
    }
    fclose(in);
}

int bfs(int vf)
{
    int ic,sf,gasit,e,i,lg;
    gasit=ic=sf=0;
    C[ic]=x;
    use[x]=1;
    while(ic<=sf&&!gasit)
    {
        e=C[ic];
        ic++;
        lg=N[e].size();
        for(i=0;i<lg&&!gasit;i++)
        {
            if(!use[N[e][i]])
            {
                sf++;
                C[sf]=N[e][i];
                use[N[e][i]]=use[e]+M[e][i];
                if(N[e][i]==y)
                    return gasit=1;
            }
        }
    }
    //return gasit;
}

int main()
{
    cit();
    use[x]=0;
    if(bfs(x))
    {
        o=fopen("sate.out","w");
       fprintf(o,"%d\n",use[y]-1) ;
    }
    return 0;
}