Cerința
Se dă un vector t=(t[1], t[2], ..., t[n])
care memorează numere naturale cuprinse între 0
și n
. Să se verifice dacă t
este sau nu vector de tați asociat unui arbore cu rădăcină.
Date de intrare
Programul citește de la tastatură numărul n
, iar apoi n
numere naturale, separate prin spații.
Date de ieșire
Programul va afișa pe ecran mesajul DA
, dacă t
este vector de tați, sau mesajul NU
în caz contrar.
Restricții și precizări
1 ≤ n ≤ 100.000
0 ≤ t[i] ≤ n
Exemplul 1:
Intrare
5 0 1 1 3 3
Ieșire
DA
Explicație
Vectorul corespunde arborelui cu rădăcină din imagine.
Exemplul 2:
Intrare
5 2 0 2 5 4
Ieșire
NU
Explicație
Nodul 4
are ca tată pe 5
, iar nodul 5
are ca tată pe 4
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 tata:
#include <bits/stdc++.h>
#define N 100005
using namespace std;
int n, rad;
int viz[N];
vector<int> h[N];
void DFS(int k)
{
viz[k] = 1;
for (auto i : h[k])
if (viz[i] == 0)
DFS(i);
}
int IsTree()
{
DFS(rad);
for (int i = 1; i <= n; i++)
if (viz[i] == 0)
return 0;
return 1;
}
int main()
{
int i, x, nrZ;
cin >> n;
nrZ = 0;
for (i = 1; i <= n; i++)
{
cin >> x;
if (x == 0)
{
nrZ++;
rad = i;
}
else h[x].push_back(i);
}
if (nrZ != 1)
{
cout << "NU\n";
return 0;
}
if (IsTree()) cout << "DA\n";
else cout << "NU\n";
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 .
Rezolvarea problemei #2749 tata
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2749 tata 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!