Cod sursa(job #1304517)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 28 decembrie 2014 23:13:12
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
#include <vector>
#include <cstring>
#include <cmath>
#define DIM 30002
using namespace std;

int n,m,x,y,viz[DIM],C[DIM],D,dist[DIM];
vector <int> v[DIM],d[DIM];
void BFS(int n){
    int p,u;
    viz[n]=1;
    C[1]=n;p=u=1;
    while(p<=u && !viz[y]){
        n=C[p++];
        for(int i=0;i<v[n].size();i++){
            if(!viz[v[n][i]]){
                if((n>x && v[n][i]>x && v[n][i]<n) || (n<x && v[n][i]<x && v[n][i]>n) || (n>x && v[n][i]<x) || (n<x && v[n][i]>x))
                    dist[v[n][i]]=abs(dist[n]-d[n][i]);
                else
                    dist[v[n][i]]=dist[n]+d[n][i];
                viz[v[n][i]]=1;
                C[++u]=v[n][i];
            }
        }
    }
}
int main(){
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    scanf("%d%d%d%d",&n,&m,&x,&y);
    while(m--){
        int g,f;
        scanf("%d%d%d",&g,&f,&D);
        v[g].push_back(f);
        v[f].push_back(g);
        d[g].push_back(D);
        d[f].push_back(D);
    }
    BFS(x);
    printf("%d",dist[y]);
    return 0;
}