Cod sursa(job #182771)

Utilizator DorinOltean Dorin Dorin Data 21 aprilie 2008 12:35:34
Problema Sate Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
# include <stdio.h>
# include <vector>

using namespace std;

# define input "sate.in"
# define output "sate.out"
# define max 30001

int coada[max],u[max];
int start, finish;
int i,j,n,m,x,y,d;
int res;
int dist[max];

vector <int> v[max],dis[max],semn[max];
int main()
{
    freopen(input,"r", stdin);
    freopen(output,"w", stdout);
    
    scanf("%d%d%d%d",&n,&m,&start,&finish);
    
    for(i = 0 ; i < m; i++)
    {
        scanf("%d%d%d",&x,&y,&d);
        v[x].push_back(y);
        dis[x].push_back(d);
        semn[x].push_back(1);
        
        v[y].push_back(x);
        dis[y].push_back(d);
        semn[y].push_back(-1);
    }    
    coada[0] = start;
    dist[0] = 0;
    res = -1;
    u[start] = 1;
    int st,dr;
    
    for(st = dr = 0; st <= dr; st++)
    {
        i = coada[st];
        d = dist[st];
        for(j = 0; j < v[i].size(); j++)
        {
            if(!u[v[i][j]])
            {
                u[v[i][j]] = 1;
                coada[++dr] = v[i][j];
                dist[dr] = d+dis[i][j] * semn[i][j];
                if(coada[dr] == finish)
                {
                    printf("%d ",dist[dr]);
                    return 0;
                }    
            }
        }    
    }
    
    printf("%d ",res);
    
    return 0;
}