Pagini recente » Cod sursa (job #2698802) | Cod sursa (job #2819991) | Cod sursa (job #3128609) | Cod sursa (job #2459238) | Cod sursa (job #137691)
Cod sursa(job #137691)
#include <stdio.h>
#include <string.h>
#define Nmax 50005
int T,N,f,nr,i;
int A[Nmax];
short int st[Nmax],dr[Nmax];
int solve(int nod,int lvl)
{
short int r1,r2;
if (A[f]<lvl) return 0;
if (A[f]==lvl) { ++f;return 1; }
//subarborele stang
++nr;
st[nod]=nr;
r1=solve(nr,lvl+1);
if ((f>N)||(r1==0)) return 0;
//subarborele drept
++nr;
dr[nod]=nr;
r2=solve(nr,lvl+1);
return r1&r2;
}
int main()
{
freopen("nivele.in","r",stdin);
freopen("nivele.out","w",stdout);
scanf("%d",&T);
while (T)
{
--T;
scanf("%d",&N);
for (i=1;i<=N;++i)
scanf("%d",&A[i]);
for (i=1;i<=N;++i)
if (A[i]>N) { N=1;A[1]=0;break; }
if ((N==1)&&(A[1]==1)) printf("DA\n");
else
{
f=1;
nr=1;
memset(st,0,sizeof(st));
memset(dr,0,sizeof(dr));
if (solve(1,1)) printf("DA\n");
else printf("NU\n");
}
}
fclose(stdin);
fclose(stdout);
return 0;
}