Cod sursa(job #1391416)

Utilizator UgleaEduFMI - Edward UgleaEdu Data 17 martie 2015 22:16:43
Problema Sate Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>

using namespace std;
int viz[ 30000 ], s[ 30000 ];
vector < int > mat[ 30000 ], l[ 30000 ];
long int n;
void bf (int start, int end )
{
    if ( start == end )
        return;
    long int x ;
    viz[ start ] = 1;

    queue< int > c;
    c.push( start );

    while ( !c.empty() )
    {
        x = c.front();
        c.pop();

        for( int i = 0; i < mat[ x ].size(); i++)

            if( !viz[ mat[ x ][ i ] ] )
            {
                viz[ mat[ x ][ i ] ]= 1;
                c.push( mat[ x ][ i ] );

                if( x > mat[ x ][ i ] )

                    s[ mat[ x ][ i ] ] = s[ x ] - l[ x ][ i ];
                else

                    s[ mat[ x ][ i ] ] = s[ x ] + l[ x ][ i ];

                if( mat[ x ][ i ] == end )

                    goto loop1;

            }

    }
    loop1:

    ofstream g( "sate.out" );
    g << s[ end ];
    cout << s[ end ];

    g.close();

}
int main()
{

    ifstream f( "sate.in" );

    long int m, i, j, k, x, y, lung;

    f >> n >> m;
    f >> j >> k;

    for (i = 0; i < m; i++)
    {

        f >> x >> y >> lung;

        l[ y ].push_back( lung );
        l[ x ].push_back( lung );

        mat[ x ].push_back( y );
        mat[ y ].push_back( x );
    }

    f.close();

    bf( j, k );

    return 0;

}