Cod sursa(job #2381072)

Utilizator Adrian00754Eu124578 Adrian00754 Data 15 martie 2019 23:10:28
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
//#include <cstdio>
#include <fstream>
#include <vector>
#include <algorithm>
 
#define NMAX 30007
  
using namespace std;
ifstream cin("sate.in");
  ofstream cout("sate.out");
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()
{
    cin >> n >> m >>y;
    for(int i = 1; i<= m; ++i)
    {
        cin >> 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)
        {
            cout << 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;
}