Cod sursa(job #373992)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 15 decembrie 2009 17:25:51
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
vector <int> v[30001];
vector<int> di[30001];
int n,m,x,y,p[30001],viz[30001],in,sf,nrr,d[30001];
char s[31];
int main ()
{
    int i,a,b,c,poz,nr;
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    scanf("%d%d%d%d\n",&n,&m,&x,&y);
    for(i=1;i<=m;i++)
    {
        a=b=c=0;
        gets(s);
        nr=strlen(s);
        s[nr]=' ';
        poz=0;
        while(s[poz]!=' ')
        {
        
            a=a*10+s[poz]-'0';
            poz++;
        }
        poz++;
        //////////////////
        while(s[poz]!=' ')
        {
            b=b*10+s[poz]-'0';
            poz++;
        }
        poz++;
        ////////////////
        while(s[poz]!=' ')
        {
            c=c*10+s[poz]-'0';
            poz++;
        }
        poz++;
        ///////////////////////
        v[a].push_back(b);
        v[b].push_back(a);
        di[a].push_back(c);
        di[b].push_back(-c);
    }
    p[1]=x;
    in=1;sf=1;
    viz[x]=1;
    while(sf>=in)
    {
        nrr=v[p[in]].size();
        for(i=nrr-1;i>=0;i--)
        {
            c=v[p[in]][i];
            if(viz[c]==0)
            {
                p[++sf]=c;
                viz[p[sf]]=1;
                d[p[sf]]=d[p[in]]+di[p[in]][i];
                if(p[sf]==y)
                {
                    printf("%d\n",d[y]);
                    return 0;
                }  //if p
            }   //if viz
        }//for
        in++;
    }   //while
    printf("%d\n",d[y]);
    return 0;
}