Cod sursa(job #391825)

Utilizator bora_marianBora marian bora_marian Data 6 februarie 2010 13:12:59
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<fstream>
using namespace std;
int v[30005];
struct nod{
       int info;
       int kil;
       nod *next;};
nod *g[30005];
void adauga(int a,int b,int c);
int y;
int main()
{
    int n,m,x;
    ifstream fin("sate.in");
    ofstream fout("sate.out");
    fin>>n>>m>>x>>y;
    int i;
    //fout<<x<<" "<<y;
    for(i=1;i<=m;i++)
    {
      int a,b,c;
      fin>>a>>b>>c;
      adauga(a,b,c);
      adauga(b,a,c);
    }
  nod *st,*dr;
  st=new nod;
  st->info=x;
  st->kil=0;
  v[x]=1;
  st->next=NULL;
  dr=st;
  int pp=0;
  while(st!=NULL && pp==0)
  {
    int k=st->info;
    //fout<<k<<endl;
    for(nod *p=g[k];p;p=p->next)
      if(v[p->info]==0)
       {
         nod *t;
         t->info=p->info;
         t->next=NULL;
         if(k<p->info)
           v[p->info]=v[k]+p->kil;
         else
           v[p->info]=v[k]-p->kil;
         if(p->info==y)
            pp=1;
         dr->next=t;
         dr=t;
         }
      nod *u;
      u=st;
      st=st->next;
      delete u;
    } 
  //ofstream fout("sate.out");
  fout<<v[y]-1;
  return 0;
} 
void adauga(int a,int b,int c)
{
  nod *q=new nod;
  q->info=b;
  q->kil=c;
  q->next=g[a];
  g[a]=q;
}