Rezolvare completă PbInfo #584 Anunt

Cerința

Într-o clasă sunt n elevi, numerotați de la 1 la n, iar unii dintre ei pot cunoaște numerele de telefon ale altor elevi. Dirigintele dorește să-i anunțe pe elevi despre un eveniment deosebit și pentru aceasta vrea să transmită informația unui singur elev din clasă, urmând ca acesta să-și anunțe colegii cărora le cunoaște numărul de telefon, aceștia să-și anunțe colegii cărora le cunosc numărul de telefon etc, astfel încât toți elevii să afle informația respectivă.

Determinați care sunt elevii din clasă care pot fi anunțați inițial astfel încât, toți elevii să fie în cele din urmă informați.

Date de intrare

Programul citește de la tastatură numărul n de elevi și numărul m perechi de elevi, iar apoi lista de m perechi de elevi i j, cu semnificația că elevul i cunoaște numărul de telefon al elevului j.

Date de ieșire

Programul va afișa pe ecran în ordine crescătoare, separate prin exact un spațiu, numerele de ordine ale elevilor care pot fi contactați de diriginte astfel încât în final toți elevii să fie informați.

Restricții și precizări

  • 1 ≤ n ≤ 100
  • pentru toate datele de test va exista cel puțin un elev care poate fi ales de diriginte

Exemplu

Intrare

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

Ieșire

1 3 5

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Anunt:

#include <iostream>
#include <fstream>
using namespace std;


int n , a[105][105];

int main()
{
    int m;
    cin >> n >> m;
    while( m )
    {
        int i , j;
        cin >> i >> j;
        a[i][j] = 1;
        m --;
    }
    for(int k = 1 ; k <= n ; ++k)
        for(int i = 1 ; i <= n ; ++i)
            for(int j = 1 ; j <= n ; ++j)
                if(a[i][j] == 0)
                    a[i][j] = a[i][k] * a[k][j];
    for(int i =1 ; i <= n ; ++i)
    {
        int ok = 1;
        for(int j = 1 ; j <= n ; ++j)
            if(a[i][j] == 0 && j != i)
                ok = 0;
        if(ok)
            cout << i << " ";
    }
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #584 Anunt

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #584 Anunt de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!