Cod sursa(job #1028856)

Utilizator rusu_raduRusu Radu rusu_radu Data 14 noiembrie 2013 19:17:24
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#include <cassert>
#include <algorithm>
#include <vector>
#include <queue>
#define Nmax 30005
#define InFile "sate.in"
#define OutFile "sate.out"
#define pb push_back
 
using namespace std;
 
int n, m, X, Y, viz[Nmax], d[Nmax];
vector <int> C[Nmax], A[Nmax];
 
void read();
void BFS(int);
void write();
 
int main ()
{
    assert (freopen (InFile, "r", stdin));
    assert (freopen (OutFile, "w", stdout));
    read();
    BFS (X);
    write();
    return 0;
}
 
void read()
{
    int i, x, y, c;
    scanf ("%d %d %d %d\n", &n, &m, &X, &Y);
    for (i=1; i<=m; i++)
    {
        scanf ("%d %d %d\n", &x, &y, &c);
        A[x].pb(y); C[x].pb(c);
        A[y].pb(x); C[y].pb(-c);
    }
}
 
void BFS (int nd)
{
    int i, x, y, c, lg;
    queue <int> Q;
    viz[nd]=1;
    d[nd]=0;
    Q.push(nd);
    while (!Q.empty())
    {
        x=Q.front(); Q.pop();
        lg=A[x].size();
        for (i=0; i<lg; i++)
        {
            y=A[x][i]; c=C[x][i];
            if (!viz[y])
            {
                viz[y]=1;
                d[y]=d[x]+c;
                Q.push (y);
		if (y==Y)
			return;
            }
        }
    }
}
 
void write()
{
    printf ("%d\n", d[Y]);
}