Cod sursa(job #1152959)

Utilizator SapientiaCHIRILA ADRIAN Sapientia Data 25 martie 2014 09:43:06
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#define NMAX 30005
using namespace std;
int n,x,y,dist[NMAX];
vector<pair<int,int> >G[NMAX];
vector<pair<int,int> >::iterator it;
queue <int> C;
void reading(int &n,int &x,int &y)
{
     int i,m,nod1,nod2,d;
     freopen("sate.in","r",stdin);
     freopen("sate.out","w",stdout);
     scanf("%d %d %d %d",&n,&m,&x,&y);
     for(i=1;i<=m;++i)
     {
         scanf("%d %d %d",&nod1,&nod2,&d);
         G[nod1].push_back(make_pair(nod2,d));
         G[nod2].push_back(make_pair(nod1,d));
     }
}
void init_data()
{
    for(int i=1;i<=n;++i) viz[i]=0;
}
void dfs()
{
    int nod;
    bool stop=0;
    C.push(x);
    viz[x]=1;
    while(!stop)
    {
         nod=C.front();C.pop();
         for(it=G[nod].begin();it!=G[nod].end();++it)
         if (!dist[it->first])
         {
                if (nod==x)
                {
                    dist[it->first]=it->second;
                    C.push(it->first);
                }
                else
                {
                    if (nod<it->first) dist[it->first]=dist[nod]+it->second;
                    else dist[it->first]=dist[nod]-it->second;
                    if (it->first==y) {stop=true;break;}
                    C.push(it->first);
                }
         }
    }
    printf("%d",dist[y]);
}
int main()
{
    reading(n,x,y);
    dfs();
    return 0;
}