Cod sursa(job #405807)

Utilizator razvan_emPrecupas Razvan razvan_em Data 28 februarie 2010 19:37:42
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
using namespace std;
ofstream ofis("sate.out");
ifstream ifis("sate.in");
int n,m,u,t,x,d,y,i,viz[34221],c[32543],a[34211][3421],dist[34211][3211];
void bfs(int);
void afisare_cost();

int main()
{
    ifis>>n>>m>>x>>y;
    for (i=1; i<=m; i++)
    {
        ifis>>u>>t>>d;  
        a[u][++a[u][0]]=t;  
        a[t][++a[t][0]]=u;
        dist[u][t]=d; 
        dist[t][u]=d;
    }
    bfs(x);
    afisare_cost();
    return 0;
}

void bfs(int x)
{
     int i,prim,ultim;
     prim=ultim=0;
     viz[x]=-1;
     c[0]=x;
     while (prim<=ultim && !viz[y])
     {
           x=c[prim++];
           for (i=1; i<=a[x][0]; i++)
           if (!viz[a[x][i]]) 
           {
                              viz[a[x][i]]=x; 
                              c[++ultim]=a[x][i]; 
           }
     }
}



void afisare_cost()
{
     int j,drum[34211],cost=0;
     drum[0]=y;
     while (viz[drum[j]]!=-1)
     drum[++j]=viz[drum[j-1]];
     for (i=1; i<=j; i++)
     if (drum[i-1]>drum[i]) cost+=dist[drum[i]][drum[i-1]];
     else cost-=dist[drum[i]][drum[i-1]];
     ofis<<cost;
}