Cod sursa(job #2976164)

Utilizator Luca529Taschina Luca Luca529 Data 8 februarie 2023 15:35:51
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
vector<pair<int, int> > x[100001];
int D[30001];

struct Data{
int a, d;
};

struct C{

bool operator()(Data a, Data b)
{if(a.d<b.d)return 1;
 return 0;
}

};
queue<Data> q;

void F(int a, int b)
{q.push({a, 0});
 D[a]=0;

 while(q.empty()!=1)
 {Data d=q.front();
  vector<pair<int, int> >:: iterator I;
  for(I=x[d.a].begin();I<x[d.a].end();I++)
  {int v=I->first, c=I->second;
   if(I->first<d.a)c*=-1;

   if(D[v]>d.d+c)
   {D[v]=d.d+c;
    q.push({v, D[v]});
   }
  }
  q.pop();
 }
}

int main()
{   int n, m, a, b, c, a1, b1;
    fin>>n>>m>>a1>>b1;
    for(int i=1;i<=m;i++)
    {fin>>a>>b>>c;
     x[a].push_back({b, c});
     x[b].push_back({a, c});
    }
    if(a1>b1)swap(a1, b1);

    fill(D+1, D+1+n, 100000000);
    F(a1, b1);

    if(D[b1]<0)D[b1]*=-1;
    fout<<D[b1];
    return 0;
}