Pagini recente » Cod sursa (job #2680898) | Cod sursa (job #1090160) | Cod sursa (job #2951154) | Cod sursa (job #4094) | Cod sursa (job #2682151)
#include <fstream>
#define NMAX 50005
using namespace std;
ifstream cin("nivele.in");
ofstream cout("nivele.out");
/*
Datorita proprietatilor unui arbore parcurs in preordine, in cazul in care
exemplul este corect se intampla urmatoarele lucruri
- o data ce s-a terminat prima parcurgere a nodurilor de stanga,
se va trece la cel mai de jos subarbore de dreapta
- astfel, daca avem o stiva, vom putea corela nodul nou citit din arborele de dreapta
cu ultimul nod citit din arborele de stanga ( fiindca sunt frati ) si le eliminam pe amandoua
- operatia de eliminare e reducerea gradului unuia dintre frati ( astfel incat
sa putem "elimina" nodul radacina, adica sa reducem si acolo gradul ca sa
simplificam mai departe )
- simplificarea va avea, necesar, ca rezultat un singur nod ramas, de grad 1
Sa se verifice cu exemple
*/
int v[NMAX];
int main()
{
int t, n, top;
cin >> t;
for(int i = 1 ; i <= t ; i++)
{
cin >> n;
top = 0;
for(int j = 1 ; j <= n ; j++)
{
cin >> v[++top];
while(top > 1 && v[top - 1] == v[top])
v[--top]--;
}
(top == 1 && v[top] == 1) ? cout << "DA \n" : cout << "NU \n";
}
return 0;
}