Cod sursa(job #1032863)

Utilizator CDXFTWABC XYZ CDXFTW Data 16 noiembrie 2013 10:11:24
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <fstream>
#include <iostream>
using namespace std;


ifstream f("sate.in");
ofstream g("sate.out");

const int NMAX=30001,MMAX=100030;

int n,m,xs,ys;
int grf[3][NMAX+MMAX+1];
int nE;
int viz[NMAX];

void prt(){
    for(int i=0;i<3;i++){
        for(int j=1;j<nE;j++)
            cout<<grf[i][j]<<" ";
        cout<<"\n";
    }

}


void gi(){
    int x,y,d;
    f>>n>>m>>xs>>ys;
    nE=n+1;
    for(int i=0;i<m;i++){
        f>>x>>y>>d;
        int k;
        for(k=x;grf[0][k];k=grf[0][k]);
        grf[0][k]=nE;
        grf[1][nE]=y;
        grf[2][nE++]=d;
        for(k=y;grf[0][k];k=grf[0][k]);
        grf[0][k]=nE;
        grf[1][nE]=x;
        grf[2][nE++]=(-d);
    }


f.close();
}
    struct{
        int x,d;

    }C[MMAX],c1,c2;



void srch(){

    int ci,cf;
    C[0].x=xs;
    viz[xs]=1;
int k;
    ci=cf=0;
    while(ci<=cf){
        c1=C[ci++];
        //cout<<c1.x<<"::"<<c1.d<<"\n";
        for(k=grf[0][c1.x];k;k=grf[0][k]){
            if(!viz[grf[1][k]]){
                c2.x=grf[1][k];
                viz[c2.x]=1;
                C[++cf].x=c2.x;
                C[cf].d=c1.d+grf[2][k];
                if(c2.x==ys){
                    g<<C[cf].d;
                    return;
                }
            }
        }
    }

}


int main(){
    gi();
    //prt();
    srch();


    g.close();
    return 0;
}