Cod sursa(job #1552810)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 18 decembrie 2015 18:25:15
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 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;
int Sol[MN];
vector< pii > G[MN];
queue< int > Q;

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

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

     if (X > Y)
        swap(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));
     }

     Q.push(X);
     Sol[X] = 1;

     while (!Q.empty())
     {
         int Node = Q.front(),Sz = G[Node].size();

         Q.pop();

         if (Node == Y)
         {
             printf("%d\n",Sol[Y] - 1);
             return 0;
         }

         for (int i = 0;i < Sz;i++)
             if (!Sol[G[Node][i].st])
             {
                 Sol[G[Node][i].st] = Sol[Node] + G[Node][i].nd;
                 Q.push(G[Node][i].st);
             }
     }

  return 0;
}