4153 - Grade3

De la Universitas MediaWiki

Cerinţa

Se dă lista arcelor unui graf orientat. Să se determine nodurile care au gradul exterior mai mic decât 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ărul de noduri care au gradul exterior mai mic decât cel interior, iar pe linie următoare afișează aceste noduri, ordonate crescător, separate prin exact un spațiu.

Restricţii şi precizări

  • 1 ≤ n ≤ 100

Exemplu 1

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
2
2 5


Exemplu 2

Intrare
101 0
Iesire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare

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_exterior_mic(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 exterior mai mic decât gradul interior
    noduri = [i for i in range(1, n + 1) if grad_exterior[i] < grad_interior[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 exterior mai mic decât gradul interior
    noduri = noduri_grad_exterior_mic(n, arce)

    # Afiseaza rezultatul
    print(len(noduri))
    print(' '.join(map(str, sorted(noduri))))


if __name__ == "__main__":
    main()