Cod sursa(job #1253103)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 31 octombrie 2014 20:11:27
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<bits/stdc++.h>
using namespace std;

struct cell
{
    int nod,cost;
};

const int NMAX=30005;

int n,m,X,Y,c[NMAX];
vector<cell>v[NMAX];
bitset<NMAX>viz;
int a,b;

inline void DFS(int x)
{
    viz[x]=1;
    for (vector<cell>::iterator it=v[x].begin();it!=v[x].end();it++)
        if (!viz[(*it).nod])
            {
                a=(*it).nod;
                b=(*it).cost;
                c[a]=abs(c[x]-b);
                if ((x>a && X>a && x<X) || (x<a && X<a && x>X))
                    c[a]=c[x]+b;
                DFS(a);
            }
}

int main()
{
    int i,x;
    cell k;
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    scanf("%d%d%d%d",&n,&m,&X,&Y);
    for (i=1;i<=m;i++)
        {
           scanf("%d%d%d",&x,&(k.nod),&(k.cost));
           v[x].push_back(k);
           swap(x,k.nod);
           v[x].push_back(k);
        }
    viz[X]=1;
    for (vector<cell>::iterator it=v[X].begin();it!=v[X].end();it++)
        {
            c[(*it).nod]=(*it).cost;
            DFS((*it).nod);
        }
    printf("%d\n",c[Y]);
    return 0;
}