Cod sursa(job #1552783)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 18 decembrie 2015 17:36:44
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
#include <algorithm>
#include <utility>

#define pii pair< int,int >
#define st first
#define nd second

using namespace std;

const int MN = 30004;

int N,M,X,Y;
bool B[MN];
vector< pii > G[MN];
queue< pii > Q;

int main()
{
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);

     scanf("%d %d %d %d",&N,&M,&X,&Y);

     while (M--)
     {
         int i,j,ds;
         scanf("%d %d %d",&i,&j,&ds);
         G[i].push_back(make_pair(j,ds));
         G[j].push_back(make_pair(i,ds));
     }

     int Dist = 0,Node = X;
     Q.push(make_pair(X,0));
     B[X]++;

     while (!Q.empty())
     {
         Node = Q.front().st;
         Dist += Q.front().nd;

         int Sz = G[Node].size();

         Q.pop();

         if (Node == Y)
         {
             printf("%d\n",Dist);
             return 0;
         }

         for (int i = 0;i < Sz;i++)
             if (!B[G[Node][i].st])
             {
                 B[G[Node][i].st]++;
                 Q.push(make_pair(G[Node][i].st,(G[Node][i].st > Node ? G[Node][i].nd : -G[Node][i].nd)));
             }
     }

  return 0;
}