Cod sursa(job #1504236)

Utilizator VladuZ1338Vlad Vlad VladuZ1338 Data 17 octombrie 2015 15:35:17
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <queue>
 
using namespace std;
 
ifstream fin ("sate.in");
ofstream fout ("sate.out");
 
int n, m, si, sf, i, x, y, c, ct, viz[30001], xi, xc, d[30001];
queue <int> Q;
 
struct nod
{
    int info;
    int dist;
    nod *urm;
};
nod *a[30001];
 
void add (nod *&prim, int x, int c)
{
    nod *p = new nod;
    p->info=x;
    p->dist=c;
    p->urm=prim;
    prim=p;
}
 
void BFS (int xi)
{
    nod *p;
    Q.push(xi); viz[xi]=1; d[xi]=0;
    while (!Q.empty())
    {
        xc=Q.front(); Q.pop();
        for (p=a[xc]; p!=0; p=p->urm)
        {
            if (viz[p->info]==0)
            {
                viz[p->info]=1;
                d[p->info]=d[xc]+p->dist;
                Q.push(p->info);
                if (p->info==sf) break;
            }
        }
    }
}
 
int main()
{
    fin >> n >> m >> si >> sf;
    for (i=1; i<=m; i++)
    {
        fin >> x >> y >> c;
        add (a[x], y, c);
        add (a[y], x, -c);
    }
    for (i=1; i<=n; i++) d[i]=20000000;
    BFS(si);
    fout << d[sf];
}