Cod sursa(job #3201632)

Utilizator VVasiuVasiu Vasile VVasiu Data 9 februarie 2024 11:41:40
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
using namespace std;
#define N 30001
ifstream fin("sate.in");
ofstream fout("sate.out");

int n, m, a, b, x, y, val, k;
int t[2][100025], start[N], viz[N], c[N];


void bfs(int plec)
{
    int st, dr, man, mini, alege, drmin = 0;
    st = dr = 1;
    viz[plec] = 1;
    c[dr] = plec;
    while(st <= dr)
    {
        man = start[c[st]];
        mini = 20000001;
        alege = 0;
        while( man )
        {
            if(t[0][man] && !viz[t[0][man]] && t[2][man] < mini)
            {
                mini = t[2][man];
                alege = t[0][man];
            }
            man = t[1][man];
        }
        if(alege)
        {
            c[++dr] = alege;
            viz[alege] = 1;
            if(alege > c[st])
                drmin += mini;
            else
                drmin -= mini;
        }
        st++;
    }
    fout << drmin;
}
int main()
{
    fin >> n >> m >> a >> b;
    while(fin >> x >> y >> val)
    {
        k++;
        t[0][k] = y;
        t[1][k] = start[x];
        t[2][k] = val;
        start[x] = k;
        k++;
        t[0][k] = x;
        t[1][k] = start[y];
        t[2][k] = val;
        start[y] = k;
    }
    bfs(a);
    return 0;
}