3450 - gegik

From Bitnami MediaWiki

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>