Cod sursa(job #1253851)

Utilizator DanyPrvPirvoaica Daniel DanyPrv Data 1 noiembrie 2014 21:27:20
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <vector>
#include <limits.h>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
vector <pair<int, int> >a[30001];
int x,y,z,X,Y,m,n,i,q[100001],c[30001],nre[30001],p,u;
bool viz[30001];
int main()
{
    f>>n>>m>>X>>Y;
    for(i=1;i<=m;i++){
        f>>x>>y>>z;
        a[x].push_back(make_pair(y,z));
        a[y].push_back(make_pair(x,-z));
    }
    for(i=1;i<=n;i++){
        c[i]=INT_MAX;
        nre[i]=a[i].size();
    }
    p=u=1;
    c[X]=0;
    q[p]=X;
    viz[X]=1;
    while(p<=u){
        for(i=0;i<nre[q[p]];i++){
            if(viz[a[q[p]][i].first]==0&&c[a[q[p]][i].first]>c[q[p]]+a[q[p]][i].second){
                viz[i]=1;
                q[++u]=a[q[p]][i].first;
                c[a[q[p]][i].first]=c[q[p]]+a[q[p]][i].second;
            }
            else{
                if(c[a[q[p]][i].first]>c[q[p]]+a[q[p]][i].second)
                    c[a[q[p]][i].first]=c[q[p]]+a[q[p]][i].second;
            }
        }
        p++;
    }
    g<<c[Y];
    return 0;
}