0573 - Grade2

From Bitnami MediaWiki
Revision as of 14:39, 4 January 2024 by Codrut Borcutean (talk | contribs) (Pagină nouă: == Cerinţa == Se dă lista arcelor unui graf orientat. Să se determine nodurile care au gradul exterior egal cu gradul interior. == Date de intrare == Programul citește de la tastatură numărul '''n''' de noduri și numărul '''m''' de arce, iar apoi lista arcelor, formată din '''m''' perechi de forma '''i''' '''j''', cu semnificația că există arc orientat de la '''i''' la '''j'''. == Date de ieșire == Programul va afișa pe ecran numărul '''C''', reprezentând num...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit]

Se dă lista arcelor unui graf orientat. Să se determine nodurile care au gradul exterior egal cu gradul interior.

Date de intrare[edit]

Programul citește de la tastatură numărul n de noduri și numărul m de arce, iar apoi lista arcelor, formată din m perechi de forma i j, cu semnificația că există arc orientat de la i la j.

Date de ieșire[edit]

Programul va afișa pe ecran numărul C, reprezentând numărul de noduri care au gradul interior egal cu cel exterior, iar pe linie următoare afișează aceste noduri, ordonate crescător, separate prin exact un spațiu.

Restricţii şi precizări[edit]

  • 1 ≤ n ≤ 100

Exemplu 1[edit]

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


Exemplu 2[edit]

Intrare
101 0
Iesire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare[edit]

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

   # 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 gradul interior egal cu gradul exterior
   noduri = [i for i in range(1, n + 1) if grad_interior[i] == grad_exterior[i]]
   return noduri


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ă nodurile care au gradul interior egal cu gradul exterior
   noduri = noduri_grad_egale(n, arce)
   # Afiseaza rezultatul
   print(len(noduri))
   print(' '.join(map(str, sorted(noduri))))


if __name__ == "__main__":

   main()

</syntaxhighlight>