Cod sursa(job #396580)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 15 februarie 2010 16:57:19
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <vector>
#include <deque>
#define N 30001
struct nod
{int x,cost;
 nod(int a,int b)
 {x=a;
  cost=b;
 }
 nod()
 {}
};
using namespace std;
vector<nod> p[N];
bool viz[N];
int dist[N];

int main ()
{freopen("sate.in","r",stdin);
 freopen("sate.out","w",stdout);
 int n,m,x,y,i,a,b,c,flag;
 deque<int> q;
 vector<nod>::iterator it,end;

 
 scanf("%d %d %d %d",&n,&m,&x,&y);
 
 for (i=1;i<=m;i++)
 {scanf("%d %d %d",&a,&b,&c);
  p[a].push_back(nod(b,c));
  p[b].push_back(nod(a,c));
 }
 q.push_back(x);
 viz[x]=1;
 flag=0;
 while(!q.empty()&&!flag)
 {end=p[q.front()].end();
  for (it=p[q.front()].begin();it!=end;it++)
  {if(viz[(*it).x]==0)
   {viz[(*it).x]=1;
    if((*it).x>q.front())
    {dist[(*it).x]=dist[q.front()]+(*it).cost;
    }
    else
    {dist[(*it).x]=dist[q.front()]-(*it).cost;
    }
    q.push_back((*it).x);
   }
   if((*it).x==y)
   {flag=1;
    break;
   }
  }
  q.pop_front();
 }
 printf("%d",dist[y]);
 
 return 0;
}