Cod sursa(job #1857310)

Utilizator NinjaCubeMihai Radovici NinjaCube Data 26 ianuarie 2017 00:38:03
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include<bits/stdc++.h>
#define dim 1000005
using namespace std;
char buff[dim+5];
int poz=0,n,m,x,y,a,b,d;
int cost[30005],minim=INT_MAX,o1,o2;
inline int min(int a,int b)
{
    return a<b?a:b;
}
void citeste(int &numar)
{
    numar=0;
    while(buff[poz]<'0' || buff[poz]>'9')
    {
        poz++;
        if(poz==dim)
        {
            poz=0;
            fread(buff,1,dim,stdin);
        }
    }
    while(buff[poz]>='0' && buff[poz]<='9')
    {
        numar=numar*10+buff[poz]-'0';
        poz++;
        if(poz==dim)
        {
            poz=0;
            fread(buff,1,dim,stdin);
        }
    }
}
vector<pair<int,int> > v[30005];
vector<pair<int,int> >::iterator it;
deque<int> q;
int main()
{
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    fread(buff,1,dim,stdin);
    citeste(n);
    citeste(m);
    citeste(o1);
    citeste(o2);
    for(int i=1;i<=m;i++)
    {
        citeste(a);
        citeste(b);
        citeste(d);
        v[a].push_back(make_pair(b,d));
        v[b].push_back(make_pair(a,-d));
        minim=min(minim,a);
        minim=min(minim,b);
    }
    cost[minim]=1;
    q.push_front(minim);
    while(!q.empty())
        {
            x=q.front();
            for(it=v[x].begin();it!=v[x].end();it++)
            {
                if(!cost[(*it).first])
                {
                    cost[(*it).first]=cost[x]+(*it).second;
                    q.push_back((*it).first);
                }
            }
            q.pop_front();
        }
    int dif=cost[o2]-cost[o1];
    printf("%d\n",dif);
    return 0;
}