Cod sursa(job #2000777)

Utilizator CodrinsahCotarlan Codrin Codrinsah Data 14 iulie 2017 18:23:00
Problema Pioni Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;
ifstream fi ("pioni.in");
ofstream fo ("pioni.out");

struct pion{int nod,lungime;};

vector <int> v[20005];
queue <pion> q;

int lg[20005],sol[20005],a[30005];
int t,nrnod,nrmuchii,i,rez,nr;

void citire()
{
    fi>>t>>nrnod>>nrmuchii;
    for (i=1;i<=nrmuchii;i++)
    {
      int nod1,nod2;
      fi>>nod1>>nod2;
      v[nod2].push_back(nod1);
      lg[nod1]=lg[nod2]+1;
    }
}

void preprocesare()
{
  int nod1,nod2;
  pion el,el2;
  for (i=1;i<=nrnod;i++)
    if (lg[i]==0)
    {
    el.nod=i;
    el.lungime=0;
    q.push(el);
    }
  while (!q.empty())
  {
    el=q.front();
    q.pop();
    nod1=el.nod;
    for (i=0;i<v[nod1].size();i++)
    {
      nod2=v[nod1][i];
      el2.nod=nod2;
      el2.lungime=el.lungime+1;
      if (el.lungime%2==0 and sol[nod2]==0) sol[nod2]=nod1;
      q.push(el2);
    }
  }
}
int main()
{
  citire();
  preprocesare();
  while (t)
  {
    t--;
    rez=0;
    fi>>nr;
    for (i=1;i<=nr;i++)
    {
      fi>>a[i];
      if (sol[a[i]]!=0) rez++;
    }
    if (rez>0)
    {
      fo<<"Nargy"<<'\n';
      fo<<rez;
      for (i=1;i<=nr;i++) if (sol[a[i]]>0) fo<<' '<<a[i]<<' '<<sol[a[i]];
      fo<<'\n';
    }
    else fo<<"Fumeanu"<<'\n';
  }
  return 0;
}