Cod sursa(job #1477749)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 26 august 2015 20:54:36
Problema Sate Scor 60
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.32 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>

#define NMAX 30007

using namespace std;
FILE *fin, *fout;
int n, m, x, y, sze, a, in = 1;
struct muchie
{
    int vec;
    int cost;
} tmp;
vector<muchie> adj[NMAX];
struct mqueue
{
    int nod;
    int sum;
} tmp2, tmp3;
queue<mqueue> q;

void citire()
{
    scanf("%d%d%d%d", &n, &m, &x, &y);
    for(int i = 1; i<= m; ++i)
    {
        scanf("%d%d%d", &a, &tmp.vec, &tmp.cost);
        adj[a].push_back(tmp);
        swap(a, tmp.vec);
        adj[a].push_back(tmp);
    }
}
void bfs()
{
    tmp2.nod = x;
    q.push(tmp2);
    while(!q.empty())
    {
        tmp3 = q.front();
        if(tmp3.nod == y)
        {
            printf("%d\n", tmp3.sum);
            break;
        }
        sze = adj[tmp3.nod].size();
        for(int j = 0; j< sze; ++j)
        {
            tmp2.nod = adj[tmp3.nod][j].vec;
            if(tmp2.nod < tmp3.nod) tmp2.sum = tmp3.sum - adj[tmp3.nod][j].cost;
            else tmp2.sum = tmp3.sum + adj[tmp3.nod][j].cost;
            q.push(tmp2);
        }
        q.pop();
        in++;
    }
}

int main()
{
    fin = freopen("sate.in", "r", stdin);
    fout = freopen("sate.out", "w", stdout);
    citire();
    bfs();
    fclose(fin);
    fclose(fout);
    return 0;
}