Cod sursa(job #445358)

Utilizator RegeleUmbrelorPopescu Mihai RegeleUmbrelor Data 23 aprilie 2010 16:46:31
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
using namespace std;
#include<fstream>
#include<vector>
const int NMAX=30001;

int n,m,dist[NMAX];
short int coada[NMAX],xp,yp;
vector <short int> a[NMAX];
vector <int> d[NMAX];

ifstream in("sate.in");
ofstream out("sate.out");

void citire()
{
   short int x1,y1;
   int ds;
   //freopen("sate.in","r",stdin);
   //freopen("sate.out","w",stdout);
   //scanf("%d%d%hd%hd", &n,&m,&xp,&yp);
   in>>n>>m>>xp>>yp;
   for(int i=1;i<=m;++i)
   {
       //scanf("%hd %hd %d", &x1,&y1, &ds);
       in>>x1>>y1>>ds;
       a[x1].push_back(y1);
       a[y1].push_back(x1);
       d[x1].push_back(ds);
       d[y1].push_back(-ds);
   }
}

void bfs()
{
    int u=0,p=0,xi,yi;
    dist[xp] = 1;
    coada[u++]=xp;
    while(u!=p)
    {
        xi=coada[p++];
        for(int i=0;i<a[xi].size();++i)
        {
            yi=a[xi][i];
            if(!dist[yi])
            {
                dist[yi]=dist[xi]+d[xi][i];
                coada[u++]=yi;
            }
            if(yi==yp) return;
        }
    }
}

int main()
{
    citire();
    bfs();
    //printf("%d",dist[yp] - 1);
    out<<dist[yp] - 1;
    return 0;

}