Cod sursa(job #1214480)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 30 iulie 2014 15:37:11
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<fstream>
#include<iostream>
#include<queue>
#include<bitset>
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");

struct nod{
    int info;
    int cost;
    nod *urm;
};

nod* graf[30009];
queue<int> coada;
bitset<30009> viz;
int n,m,start,finish,sol[30009];

void adauga(nod *&p,int dest,int cst)
{
    nod *nou = new nod;
    nou->info = dest;
    nou->cost = cst;
    nou->urm = p;
    p = nou;
}

void read()
{

    in>>n>>m>>start>>finish;
    int x,y,c;
    for( ; m ; --m){
        in>>x>>y>>c;
        adauga(graf[x],y,c);
        adauga(graf[y],x,c);
    }
}

void bfs()
{
    coada.push(start);
    nod *i;
    viz[start] = 1;
    int vrf;
    while(!coada.empty()){
        vrf = coada.front();
        for(i = graf[vrf] ; i != NULL ; i = i->urm){
            if(!viz[i->info]){
            if(vrf < i->info)
                sol[i->info] = sol[vrf] + i->cost;
            else
                sol[i->info] = sol[vrf] - i->cost;
            viz[i->info] = 1;
            coada.push(i->info);
            }
        }
        coada.pop();
    }
}

int main()
{
    viz.reset();
    read();
    int x1 = max(start,finish);
    int x2 = min(start,finish);
    finish = x1;
    start = x2;
    bfs();
    out<<sol[finish];
    return 0;
}