Cod sursa(job #3201780)

Utilizator XIIs12sPeteleu Denis Andrei XIIs12s Data 9 februarie 2024 18:51:02
Problema Sate Scor 30
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.11 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
int n,m,x,y,a,b,c; int val[30001];
int t[3][2*100025],start[2*100025],viz[30001];
void bfs(int x1)
{
    int st,dr;
    int c1[30001];
    st=dr=1;
    c1[st]=x1;

    while(st<=dr)
    {
        int k=c1[st];
        int man=start[k];
        while(man)
        {
            if(val[t[0][man]]==0)
            {
                dr++;
                c1[dr]=t[0][man];
                if(c1[dr]>c1[st])
                    val[c1[dr]]=t[2][man]+val[c1[st]];
                else
                    val[t[0][man]]=max(t[2][man]-val[c1[st]],val[c1[st]]-t[2][man]);
            }
            man=t[1][man];
        }

        st++;
    }
}
int main()
{
   f>>n>>m>>x>>y;
   int k=0;
   for(int i=1;i<=m;i++)
   {
       f>>a>>b>>c;
       k++;
       t[0][k]=b;
       t[1][k]=start[a];
       t[2][k]=c;
       start[a]=k;
        k++;
       t[0][k]=a;
       t[1][k]=start[b];
       t[2][k]=c;
       start[b]=k;
   }
   bfs(x);
    g<<val[y]-val[x];

    return 0;
}