Cod sursa(job #2280422)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 10 noiembrie 2018 16:10:27
Problema Obiective Scor 35
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
//#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("obiective.in");
ofstream out("obiective.out");
int n,m,p,nr;
const int Max=32005;
vector < pair < int ,int > >gg[Max];
int d[Max],viz[Max];
set < pair < int ,int > >c;
void citire()
{
    in>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        in>>x>>y;
        gg[x].push_back(make_pair(y,0));
        gg[y].push_back(make_pair(x,1));
    }
}

void Dijkstra(int x,int y)
{
    while(!c.empty()) c.erase(c.begin());
   for(int i=1;i<=n;i++)
   {
       d[i]=INT_MAX;
       viz[i]=0;
   }

   d[x]=0;
   c.insert({0,x});
   while(!c.empty())
   {
       int nod=c.begin()->second;
       c.erase(c.begin());
       if(viz[nod]==0)
       {
           viz[nod]=1;
            for(int i=0;i<gg[nod].size();i++)
          {
                int vecin=gg[nod][i].first;
                int cost=gg[nod][i].second;
                  if(d[vecin]>d[nod]+cost)
                {
                    if(d[vecin]!=INT_MAX)
                      c.erase({d[vecin],vecin});
                  d[vecin]=d[nod]+cost;
                  c.insert({d[vecin],vecin});
                }
          }
       }

   }
   out<<d[y]<<"\n";

}
int main()
{
    citire();
     in>>p;
    for(int i=1;i<=p;i++)
    {
        int x,y;
        in>>x>>y;
        Dijkstra(x,y);

    }
    return 0;
}