Cod sursa(job #1204856)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 4 iulie 2014 11:41:11
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;

vector<int> v[30009];
vector<int> dist[30009];
queue<int> coada;

int viz[30009],d[30009],start,finish,n,m;

void bfs(int start)
{

    coada.push(start);
    viz[start] = 1;
    int i,k;
    while(!coada.empty()){
        k = coada.front();
        coada.pop();
        for(i = 0 ; i < v[k].size() ; i++){
            if(!viz[v[k][i]]){
                if(k > v[k][i])
                    d[v[k][i]] = d[k] - dist[k][i];
                else
                    d[v[k][i]] = d[k] + dist[k][i];
            if(d[finish])
                return;
            coada.push(v[k][i]);
            viz[v[k][i]] = 1;
            }
        }
    }
}

int main()
{
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    int i,x1,y1,c,x,y;
    scanf("%d%d%d%d",&n,&m,&x1,&y1);
    start = min(x1,y1);
    finish = max(x1,y1);
    for(i = 1 ; i <= m ; i++)
    {
        scanf("%d%d%d",&x,&y,&c);
        v[x].push_back(y);
        dist[x].push_back(c);
        v[y].push_back(x);
        dist[y].push_back(c);
    }
    bfs(start);
    printf("%d",d[finish]);
    return 0;
}