Cod sursa(job #1759478)

Utilizator eragon0502Dumitrescu Dragos eragon0502 Data 19 septembrie 2016 12:01:08
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <vector>
using namespace std;

const int N = 100005;

vector <int> a[N],b[N];


int q[N];
int d[N];

void adauga(int x,int y)
{
    a[x].push_back(y);
}
void adauga2(int x,int y)
{
    b[x].push_back(y);
}

int main()
{
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    int st,dr,x,y,i,n,m,x1,y1,dist,xa;
    scanf("%d %d %d %d",&n,&m,&x1,&y1);
    for(i=1; i<=m; ++i)
    {
        scanf("%d %d %d",&x,&y,&dist);
        adauga(x,y);
        adauga(y,x);
        adauga2(x,dist);
        adauga2(y,dist);
    }
    st=0;
    dr=-1;
    q[st]=x1;
    ++dr;
    while(st<=dr)
    {

        x=q[st++];

        for(i=0; i<a[x].size(); ++i)
        {
            d[x1]=0;
            y=a[x][i];
            if(d[y]==0&&y!=x1){
            ++dr;
            if(x<y){
                q[dr]=y;
                d[y]=d[x]+b[x][i];
                }
            if(x>y){
                q[dr]=y;
                d[y]=d[x]-b[x][i];
                }
            }
            }
    }
    printf("%d",d[y1]);
    /*for(i=1;i<=n;++i)
        {
        if(i==s)
            {
                printf("0 ");
            }
        else{
            if(d[i]==0)
                printf("-1 ");
            else
                printf("%d ",d[i]);
            }
        }*/
    return 0;
}