Cod sursa(job #778603)

Utilizator gicu_01porcescu gicu gicu_01 Data 15 august 2012 02:05:13
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>

#define nr 30010

using namespace std;

struct S{
    int nod;
    int cost;
};

vector <S> a[nr];
int c[nr],s[nr],g[nr];
int start,n,m,end;


void BFS(int nod)
{
    int i,j,l;
    l=1;
    c[nod]=1;
    s[l]=nod;
    for (i = 1; i <= l; i++)
    for (j = 0; j < g[s[i]]; j++)
    {
       if (c[a[s[i]][j].nod] == 0)
       {
           s[++l] = a[s[i]][j].nod;
           c[s[l]] = c[s[i]] + a[s[i]][j].cost;
       }
       if ( c[end]!=0) break;
    }
    printf("%i",c[end]-1);
}


int main()
{
	freopen("sate.in", "r", stdin);
	freopen("sate.out", "w", stdout);
	int i,j,k,t,x,y,c;
    char s[1000];
    gets(s);
    t=0;
    for (i=0; i<strlen(s); i++)
        if (s[i]==' ')
        {
            if (!n) n=t; else
            if (!m) m=t; else start=t;
            t=0;
        } else t=t*10+s[i]-'0';
    end=t;
    for (i=1; i<=m; i++)
    {
         gets(s);
         t=0; k=0;
         for (j=0; j<strlen(s); j++)
              if (s[j]==' ')
              {
                  k++;
                  if (k==1) x=t; else y=t;
                  t=0;
              } else t=t*10+s[j]-'0';
         c=t;
         a[x].push_back((S) {y,c}  );
         a[y].push_back((S) {x,-c} );
    }
    for (i=1; i<=n; i++) g[i]=a[i].size();
    BFS(start);
    return 0;
}