0575 - Cunoscuti

From Bitnami MediaWiki
Revision as of 14:59, 4 January 2024 by Codrut Borcutean (talk | contribs) (Pagină nouă: == Cerinţa == Într-un grup sunt '''n''' persoane, numerotate de la '''1''' la '''n''' și o persoană poate cunoaște alte persoane – relație care nu este reciprocă. Să se determine persoana cea mai cunoscută. == Date de intrare == Programul citește de la tastatură numărul '''n''' de noduri și numărul '''m''' de relații dintre persoane, iar apoi '''m''' perechi de forma '''i j''', cu semnificația că persoana '''i''' cunoaște persoana '''j'''. == Date de ieși...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit | edit source]

Într-un grup sunt n persoane, numerotate de la 1 la n și o persoană poate cunoaște alte persoane – relație care nu este reciprocă. Să se determine persoana cea mai cunoscută.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n de noduri și numărul m de relații dintre persoane, iar apoi m perechi de forma i j, cu semnificația că persoana i cunoaște persoana j.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran numărul de ordine al celei mai cunoscute persoane. Dacă răspunsul constă din mai multe persoane, se vor afișa toate, în ordine crescătoare a numerelor de ordine, separate prin exact un spațiu.

Restricţii şi precizări[edit | edit source]

  • 1 ≤ n ≤ 100

Exemplu 1[edit | edit source]

Intrare
5 8
1 3
1 4
3 2
3 4
4 2
5 2
5 4
5 1
Iesire
Datele de intrare corespund restrictiilor impuse
2 4


Exemplu 2[edit | edit source]

Intrare
104 0
Iesire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def verifica_restrictii(n, arce):

   # Verifică dacă datele de intrare respectă restricțiile
   if not (1 <= n <= 100) or not all(1 <= i <= n and 1 <= j <= n for i, j in arce):
       return False
   return True


def persoana_cea_mai_cunoscuta(n, arce):

   # Inițializează gradele interioare ale nodurilor
   grad_interior = [0] * (n + 1)
   # Calculează gradele interioare ale nodurilor
   for _, j in arce:
       grad_interior[j] += 1
   # Determină persoanele cele mai cunoscute
   max_grad = max(grad_interior)
   persoane = [i for i in range(1, n + 1) if grad_interior[i] == max_grad]
   return persoane


def main():

   n, m = map(int, input().split())
   arce = [tuple(map(int, input().split())) for _ in range(m)]
   # Verifică dacă datele de intrare respectă restricțiile
   if not verifica_restrictii(n, arce):
       print("Datele de intrare nu corespund restrictiilor impuse")
       return
   print("Datele de intrare corespund restrictiilor impuse")
   # Determină persoanele cele mai cunoscute
   persoane = persoana_cea_mai_cunoscuta(n, arce)
   # Afiseaza rezultatul
   if persoane:
       print(' '.join(map(str, sorted(persoane))))
   else:
       print("NU EXISTA")


if __name__ == "__main__":

   main()


</syntaxhighlight>