Ionuț tocmai a terminat liceul și susține examenul de admitere la facultate. Știind că s-a pregătit foarte bine pentru examen, el dorește să își anunțe reușita după examen printr-o postare pe Facebook.
Ionuț tocmai a terminat liceul și susține examenul de admitere la facultate. Știind că s-a pregătit foarte bine pentru examen, el dorește să își anunțe reușita după examen printr-o postare pe Facebook.
Ionuț cunoaște n
utilizatori reprezentați de numerele de la 1
la n
, între care există m
relații de prietenie de forma i j
, unde i
și j
sunt utilizatori, iar n
și m
sunt numere naturale nenule. Un utilizator nu poate fi prieten cu el însuși, iar o relație de prietenie între doi utilizatori ne spune că fiecare dintre ei este prieten cu celălalt.
Întrucât dorește ca postarea lui să fie cât mai răspândită, Ionuț vrea să afle care sunt utilizatorii cei mai bine conectați din mulțimea sa de cunoscuți, pentru ca eventual să le ceară prietenia. Pentru aceasta, Ionuț trebuie să găsească cea mai mare submulțime de utilizatori cunoscuți, în care fiecare utilizator din această submulțime are cel puțin k
prieteni aflați la rândul lor în submulțime, unde k
este un număr natural nenul.
Cerința
Ajutați-l pe Ionuț să se determine și să se afișeze, printr-o soluție de complexitate timp cât mai bună, în funcție de datele de intrare, membrii celei mai mari submulțimi de utilizatori, cu proprietatea că fiecare utilizator din această submulțime are cel puțin k
prieteni aflați la rândul lor în submulțime.
Date de intrare
Fișierul de intrare fb_fmi.in
conține pe prima linie numerele n
, m
și k
, separate prin spațiu, iar pe a doua linie 2•m
numere naturale cuprinse între 1
și n
, separate prin spațiu, reprezentând în ordine cele m
relații de prietenie între cei n
utilizatori.
Date de ieșire
Fișierul de ieșire fb_fmi.out
va conține pe prima linie numărul natural Q
ce reprezintă numărul maxim de membrii ai submulțimii de utilizatori care au cel puțin k
prieteni, aflați la rândul lor în submulțime.
Pe următoarea linie, în ordine crescătoare, sunt enumerați utilizatori submulțimii. În cazul în care nu există o astfel de submulțime pentru k
dat, în fișier se va scrie valoarea 0
.
Restricții și precizări
2 ≤ n ≤ 1.000
Exemplul 1:
fb_fmi.in
5 5 2 1 2 5 1 3 2 4 5 1 4
fb_fmi.out
3 1 4 5
Exemplul 2:
fb_fmi.in
5 5 3 1 2 5 1 3 2 4 5 1 4
fb_fmi.out
0
Exemplul 3:
fb_fmi.in
11 18 3 1 8 4 7 7 10 11 10 2 1 2 3 8 9 8 3 9 3 9 2 5 6 5 11 1 4 10 6 7 6 2 8 11 7 11 6
fb_fmi.out
8 2 3 6 7 8 9 10 11
Atenție!
Programele vor folosi doar instrucțiunile de bază ale limbajului de programare ales, inclusiv cele de intrare/ieșire, dar nu și alte funcții din biblioteci specializate.
#include <bits/stdc++.h> using namespace std; ifstream cin("fb_fmi.in"); ofstream cout("fb_fmi.out"); int n , m , k , x , y , a[1001][1001] , ok , cnt; int main() { cin >> n >> m >> k; for(int i = 1 ; i <= m ; i++) { cin >> x >> y; a[x][y] = a[y][x] = 1; a[x][0]++; a[y][0]++; } while(1) { int ok = 0; for(int i = 1 ; i <= n ; i++) { if(a[i][0] < k && a[i][0] != 0) { a[i][0] = 0; for(int j = 1 ; j <= n ; j++) if(a[i][j] == 1) a[j][i] = a[i][j] = 0 , a[j][0]--; ok++; } } if(ok == 0)break; } for(int i = 1 ; i <= n ; i++) if(a[i][0] > 0) cnt++; cout << cnt << '\n'; for(int i = 1 ; i <= n ; i++) if(a[i][0] > 0) cout << i << " "; }