2888 - Spanning Tree: Difference between revisions
Rus Marius (talk | contribs) Pagină nouă: == Enunț == Se consideră un graf neorientat conex cu <code>n</code> noduri și <code>n</code> muchii. = Cerința = Să se determine numărul arborilor parțiali ai grafului. = Date de intrare = Programul citește de la tastatură numărul <code>n</code>, iar apoi <code>n</code> perechi de numere naturale <code>x y</code> reprezentând cele <code>n</code> muchii. = Date de ieșire = Programul va afișa pe ecran numărul arborilor parțiali ai grafului. = Restricții și... |
Rus Marius (talk | contribs) |
||
Line 9: | Line 9: | ||
= Date de ieșire = | = Date de ieșire = | ||
Programul va afișa pe ecran numărul arborilor parțiali ai grafului. | Programul va afișa pe ecran numărul arborilor parțiali ai grafului.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Datele nu corespund restrictiilor impuse". | ||
= Restricții și precizări = | = Restricții și precizări = |
Latest revision as of 19:55, 6 January 2024
Enunț[edit | edit source]
Se consideră un graf neorientat conex cu n
noduri și n
muchii.
Cerința[edit | edit source]
Să se determine numărul arborilor parțiali ai grafului.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n
, iar apoi n
perechi de numere naturale x y
reprezentând cele n
muchii.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran numărul arborilor parțiali ai grafului.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Datele nu corespund restrictiilor impuse".
Restricții și precizări[edit | edit source]
1 ≤ n ≤ 30.000
- cele
n
muchii sunt distincte două câte două
Exemplul 1:[edit | edit source]
Intrare
7 1 4 1 5 2 3 2 4 4 5 4 6 4 7
Ieșire
3
Exemplul 2:[edit | edit source]
Intrare
30001
Ieșire
Datele nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> from collections import deque
def check_restriction_n(value):
if not (1 <= value <= 30000): print("Datele nu corespund restrictiilor impuse") exit()
def main():
n = int(input()) check_restriction_n(n)
v = [[] for _ in range(30001)] t = [0] * 30001 cnt = 0 q = deque()
for _ in range(n): x, y = map(int, input().split()) v[x].append(y) v[y].append(x) t[x] += 1 t[y] += 1
for i in range(1, n + 1): if t[i] == 1: q.append(i)
while q: x = q.popleft() for y in v[x]: if t[y]: t[y] -= 1 if t[y] == 1: q.append(y) t[x] = 0
for i in range(1, n + 1): if t[i] == 2: cnt += 1
print(cnt)
if __name__ == "__main__":
main()
</syntaxhighlight>