Cod sursa(job #796726)

Utilizator VisuianMihaiMihai Visuian VisuianMihai Data 12 octombrie 2012 12:03:36
Problema Sate Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
bool visited[30001];
vector<pair<int, int> >g[30001];
queue<int> q;
int c[30001], n, m, x, y, n1, n2, cost;
int Solve(int node, int destination)
{
    int current = node;
    q.push(current);
    while ( !q.empty())
    {
        current = q.front();
        for ( size_t i = 0; i < g[current].size(); i++ )
        {
            if ( !visited[g[current][i].first] )
            {
                visited[g[current][i].first] = 1;
                q.push(g[current][i].first);
                c[g[current][i].first] = c[current]+g[current][i].second;
                if ( g[current][i].first == destination )
                {
                    return c[g[current][i].first];
                }
            }
        }
        q.pop();
    }
}
int main()
{
    fin >> n >> m >> x >> y;
    for ( int i = 1; i <= n; i++ )
    {
        fin >> n1 >> n2 >> cost;
        g[n1].push_back(make_pair(n2,cost));
        g[n2].push_back(make_pair(n1,-cost));
    }
    fout << Solve(x,y);
    return 0;
}