Cod sursa(job #182785)

Utilizator DorinOltean Dorin Dorin Data 21 aprilie 2008 12:39:50
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 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];
struct eee
{
    int y,d,s;
};
vector <eee> 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((eee){y,d,1});
        v[y].push_back((eee){x,d,-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].y])
            {
                u[v[i][j].y] = 1;
                coada[++dr] = v[i][j].y;
                dist[dr] = d+v[i][j].d * v[i][j].s;
                if(coada[dr] == finish)
                {
                    printf("%d ",dist[dr]);
                    return 0;
                }    
            }
        }    
    }
    
    printf("%d ",res);
    
    return 0;
}