4304 - FF
Cerința[edit | edit source]
Se dă un graf neorientat. Să se determine un subgraf al său, cu număr cât mai mare de noduri și în care fiecare nod are gradul cel puțin 2
.
Date de intrare[edit | edit source]
Fișierul de intrare ffIN.txt
conține pe prima linie numerele n
și m
reprezentând numărul de noduri și numărul de muchii pentru graful dat. Fiecare din următoarele m
linii conține două numere, x
și y
, semnificând existența în graful dat a unei muchii între nodurile x
și y
.
Date de ieșire[edit | edit source]
Fișierul de ieșire ffOUT.txt
va conține valoarea ce reprezintă numărul maxim de noduri pe care le poate avea subgraful determinat.Î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 ≤ 100.000
1 ≤ m ≤ 200.000
- Se garantează existența unui astfel de subgraf.
Exemplul 1:[edit | edit source]
ffIN.txt
4 4 1 2 4 1 2 3 1 3
ffOUT.txt
3
Exemplul 2:[edit | edit source]
ffIN.txt
123921321 4 1 2 4 1 2 3 1 3
ffOUT.txt
Datele nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> from collections import deque
Inf = 0x3f3f3f3f
def check_restrictions(n, m):
if not (1 <= n <= 100000 and 1 <= m <= 200000): with open("ffOUT.txt", "w") as outfile: outfile.write("Datele nu corespund restrictiilor impuse") return True return False
def main():
with open("ffIN.txt", "r") as infile, open("ffOUT.txt", "w") as outfile: n, m = map(int, infile.readline().split()) if check_restrictions(n, m): return G = [[] for _ in range(n + 1)] g = [0] * (n + 1) f = [0] * (n + 1) scad = 0
for _ in range(m): x, y = map(int, infile.readline().split()) G[x].append(y) G[y].append(x) g[x] += 1 g[y] += 1
q = deque() for i in range(1, n + 1): if g[i] == 1: q.append(i) g[i] = 0 f[i] = 1 elif g[i] == 0: scad += 1
while q: x = q.popleft() scad += 1 for i in G[x]: g[i] -= 1
if g[i] < 2 and f[i] == 0: q.append(i) f[i] = 1
outfile.write(str(n - scad))
if __name__ == "__main__":
main()
</syntaxhighlight>