4070 - Subgraf 2

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dă lista muchiilor unui graf neorientat cu n noduri, etichetate de la 1 la n, m muchii și un număr k. Din acest graf se elimină toate nodurile etichetate cu multipli ai lui k. Să se determine câte muchii va avea subgraful obținut.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele n m k, apoi citește m perechi de numere i j, cu semnificația că există muchie între i și j.

Date de ieşire[edit | edit source]

Programul va afișa pe ecran numărul de muchii ale subgrafului obținut.

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

  • 1 < k < n ≤ 100
  • 1 ≤ i , j ≤ n

Exemplul 1[edit | edit source]

Intrare

5 6 2
1 5
2 5
2 3
2 4
4 5
4 3

Ieșire

1

Explicație[edit | edit source]

Se elimină vârfurile 2 4. Subgraful va conține vârfurile 1 3 5, cu o singură muchie.

Exemplul 2[edit | edit source]

Intrare

5 6 1000

Ieșire

Datele nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def elimina_muchii_multipli(graf, k):

   muchii_noi = []
   for muchie in graf:
       i, j = muchie
       if i % k != 0 and j % k != 0:
           muchii_noi.append(muchie)
   return muchii_noi

def verificare_restrictii(n, m, k):

   if not (1 < k < n <= 100):
       print("Datele nu corespund restrictiilor impuse")
       return False
   return True

def main():

   # Citirea datelor de intrare pentru n, m și k
   n, m, k = map(int, input().split())
   # Verificarea restricțiilor pentru n, m și k
   if not verificare_restrictii(n, m, k):
       return
   muchii = []
   for _ in range(m):
       # Citirea muchiilor
       muchie = tuple(map(int, input().split()))
       muchii.append(muchie)
   # Eliminarea nodurilor etichetate cu multipli ai lui k
   muchii_noi = elimina_muchii_multipli(muchii, k)
   # Afișarea numărului de muchii ale subgrafului obținut
   print(len(muchii_noi))

if __name__ == "__main__":

   main()

</syntaxhighlight>