Cod sursa(job #1477741)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 26 august 2015 20:41:51
Problema Sate Scor 45
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.35 kb
#include <cstdio>
#include <vector>
#include <algorithm>

#define NMAX 50007

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

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()
{
    q[dr].nod = x;
    q[dr].tata = -1;
    dr++;
    for(int i = 1; i< dr; ++i)
    {
        if(q[i].nod == y)
        {
            printf("%d\n", q[i].sum);
            break;
        }
        sze = adj[q[i].nod].size();
        for(int j = 0; j< sze; ++j)
        {
            if(adj[q[i].nod][j].vec == q[i].tata) continue;
            q[dr].nod = adj[q[i].nod][j].vec;
            q[dr].tata = i;
            if(q[dr].nod < q[i].nod) q[dr].sum = q[i].sum - adj[q[i].nod][j].cost;
            else q[dr].sum = q[i].sum + adj[q[i].nod][j].cost;
            dr++;
        }
    }
}

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