Cod sursa(job #967698)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 28 iunie 2013 12:21:59
Problema Sate Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
int n,m,X,Y;
bool viz[30024];

vector<int> L[30024],D[30024];

struct coada{
    int nod;
    int d;
};
coada c[300024];

inline int dist(int x,int y,int p){
    if(x>y){
        return -D[x][p];
    }
    else
        return D[x][p];
}

int main(void){
    register int i,j,x,y,d,p,u;

    f>>n>>m>>X>>Y;
    for(i=1;i<=m;i++){
        f>>x>>y>>d;
        L[x].push_back(y);
        D[x].push_back(d);
        L[y].push_back(x);
        D[y].push_back(d);
    }

    p=u=1;
    c[p].nod=X;
    while(p<=u){
        for(i=0;i<L[c[p].nod].size();i++){
            if(!viz[L[c[p].nod][i]]){
                c[++u].nod=L[c[p].nod][i];
                c[u].d=c[p].d+dist(c[p].nod,L[c[p].nod][i],i);
                if(c[u].nod==Y){
                    g<<c[u].d;
                    f.close();
                    g.close();
                    return 0;
                }
            }
        }
        p++;
    }
    return 0;
}