3450 - gegik

From Bitnami MediaWiki
Revision as of 14:54, 4 January 2024 by Codrut Borcutean (talk | contribs) (Pagină nouă: == Cerinţa == Se dă un graf orientat cu '''n''' vârfuri și '''m''' arce prin lista arcelor și un număr natural '''k'''. Afișați vârfurile din graf care au suma gradelor (interior și exterior) egală cu '''k'''. == Date de intrare == Programul citește de la tastatură numărul '''n''' de noduri și numărul '''m''' de arce și un număr '''k'''. Apoi se citește lista arcelor, formată din '''m''' perechi de forma '''i j''', cu semnificația că există arc de la no...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit | edit source]

Se dă un graf orientat cu n vârfuri și m arce prin lista arcelor și un număr natural k. Afișați vârfurile din graf care au suma gradelor (interior și exterior) egală cu k.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n de noduri și numărul m de arce și un număr k. Apoi se citește lista arcelor, formată din m perechi de forma i j, cu semnificația că există arc de la nodul i la nodul j.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran în ordine crescătoare și separate printr-un spațiu vârfurile care au suma gradelor (interior și exterior) egală cu k. Dacă nu există astfel de vârfuri, atunci programul va afișa Nu exista.

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

  • 1 ≤ n ≤ 100

Exemplu 1[edit | edit source]

Intrare
7 10 3
1 2
1 3
1 4
1 5
2 5
5 1
3 4
4 3
4 6
4 7
Iesire
Datele de intrare corespund restrictiilor impuse
3 5


Exemplu 2[edit | edit source]

Intrare
103 0 0
Iesire
Datele de intrare nu corespund restrictiilor impuse


Explicatie[edit | edit source]

Vârfurile 3 și 5 au suma gradelor egală cu 3.

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 noduri_grad_suma_k(n, arce, k):

   # Inițializează gradele interioare și exterioare ale nodurilor
   grad_interior = [0] * (n + 1)
   grad_exterior = [0] * (n + 1)
   # Calculează gradele interioare și exterioare ale nodurilor
   for i, j in arce:
       grad_exterior[i] += 1
       grad_interior[j] += 1
   # Determină nodurile care au suma gradelor egală cu k
   noduri = [i for i in range(1, n + 1) if grad_interior[i] + grad_exterior[i] == k]
   return noduri


def main():

   n, m, k = 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ă nodurile care au suma gradelor egală cu k
   noduri = noduri_grad_suma_k(n, arce, k)
   # Afiseaza rezultatul
   if noduri:
       print(' '.join(map(str, sorted(noduri))))
   else:
       print("NU EXISTA")


if __name__ == "__main__":

   main()


</syntaxhighlight>