Cod sursa(job #1108399)

Utilizator obidanDan Ganea obidan Data 15 februarie 2014 17:19:05
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <cstdio>
#include <vector>
#include <queue>
#define NMax 30002
using namespace std;
int n,m,s,f;
vector< pair<int,int> > G[NMax];
int dmin[NMax];
int viz[NMax];
void citire()
{
    vector< pair<int,int> >::iterator it;
    int x,y,i,c;
    freopen("sate.in","r",stdin);
    scanf("%d%d%d%d\n",&n,&m,&s,&f);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&x,&y,&c);
        G[x].push_back(make_pair(y,c));
        G[y].push_back(make_pair(x,c));
    }
}
void bellman()
{
         vector< pair<int,int> >::iterator it;
        bool gasit=0;
        queue<int> q;
        int from;
        q.push(s);
        dmin[s]=1;
        viz[s]=1;
        while((!q.empty())&&!gasit)
    {
        from=q.front();
        q.pop();
        for(it=G[from].begin();it!=G[from].end();it++)
        {
            if((!viz[it->first])&&(it->second))
            {
                viz[it->first]=1;
                if((it->first)>from) dmin[it->first]=it->second + dmin[from];
                else if
                    ((it->first)<from) dmin[it->first]=dmin[from] - it->second;
                q.push(it->first);
                if((it->first)==f)gasit=1;
            }

        }

    }

}
int main()
{
    freopen("sate.out","w",stdout);
    citire();
    bellman();
    printf("%d",dmin[f]-1);

}