Cod sursa(job #897541)

Utilizator Bigb21Avram Bogdan Bigb21 Data 27 februarie 2013 21:11:20
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
#include<queue>
#define NMAX 30002
#define MMAX 100026
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");

vector <int>v[MMAX];
queue  <int> cod;
int viz[NMAX],n,m,x,y;

 struct graf
 {
      int cost,nod;
      graf*next;

 };
 graf* a[NMAX];
 void add(int where ,int what ,int cost)
 {
      graf*q =new graf;
      q->nod=what;
      q->cost=cost;
      q->next=a[where];
      a[where]=q;
 }

void read ()
{
     int z,b,p;
      in>>n>>m>>x>>y;

      for(int i=1; i<=m;++i)
         {
             in>>z>>b>>p;
             v[z].push_back(b);
             v[b].push_back(z);
              add(z,b,p);
              add(b,z,p);
         }

}
int dist(int z,int nod)
{
    graf*t=a[nod];

      while(t)
      {
           if(z==t->nod)
             {
               return t->cost;
             }


               t=t->next;

      }

}
int main ()
{  int nod;
    read();

    cod.push(x);

    while(!cod.empty())
    {
        nod=cod.front();
         cod.pop();
        for(int j=0; j<v[nod].size(); ++j )
        {
         if(!viz[v[nod][j]] &&  v[nod][j]!=x)
        {
                    cod.push(v[nod][j]);

                  if(nod>v[nod][j])
                    viz[v[nod][j]]=viz[nod]-dist(v[nod][j],nod);
                    else
                     viz[v[nod][j]]=viz[nod]+dist(v[nod][j],nod);
        }
        }


                if(nod==y)
                   {
                       out<<viz[nod];
                       break;
                   }
    }

       in.close();
       out.close();
       return 0;

    }