Cod sursa(job #1469030)

Utilizator adina0822Ciubotaru Adina-Maria adina0822 Data 7 august 2015 15:22:45
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
using namespace std;
#include <fstream>
#include <stdlib.h>


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

struct drum{int y,d;} *G[30001];
int n,s,d;
int dmin[30001];
int Q[30001];
int viz[30001];

void read();
void solve();
void write();

int main ()
{
  read();
  solve();
  write();


}

void read()
{
    int i,x,y,c,m;
    f>>n>>m>>s>>d;
    for(i=1; i<=n; i++)
    {
        G[i]=(drum*) realloc(G[i],sizeof(drum));
        G[i][0].y=0;
    }
    for (i=1; i<=m; i++)
    {
        f>>x>>y>>c;
        G[x][0].y++;
        G[x]=(drum*) realloc(G[x],(G[x][0].y+1)*sizeof(drum));
        G[x][G[x][0].y].y=y;
        G[x][G[x][0].y].d=c;

        G[y][0].y++;
        G[y]=(drum*) realloc(G[y],(G[y][0].y+1)*sizeof(drum));
        G[y][G[y][0].y].y=x;
        G[y][G[y][0].y].d=c;
     }
     /*
     for(i=1; i<=n; i++)
     {
         g<<i<<" ";
         for(int j=1; j<=G[i][0].y; j++) g<<G[i][j].y<<" "<<G[i][j].d<<" ";
         g<<'\n';
     }
     */

}

void solve()
{
    int p,u,i,x;
    dmin[s]=0;
    Q[0]=s;
    p=u=0;
    viz[s]=1;
    while(p<=u && !viz[d])
    {
        x=Q[p++];
        for(i=1; i<=G[x][0].y; i++)
        if(!viz[G[x][i].y])
        {
            if(G[x][i].y>x) dmin[G[x][i].y]=dmin[x]+G[x][i].d;
            else dmin[G[x][i].y]=dmin[x]-G[x][i].d;
            viz[G[x][i].y]=1;
            Q[++u]=G[x][i].y;

        }
    }


}
void write()
{
   g<<dmin[d];
}