def dfsvisit():
global d
global vis
count=0
count1=0
for i in d:
c1=0
if vis[i-1]==0:
vis[i-1]=1
c1=dfs(i)
if c1==0:
count=count+1
else:
count1+=1
if count1>0:
return(count+1,count+count1)
else:
return(count,count+count1)
def dfs(i):
global d
global vis
t1=d[i]
flag=0
if len(t1)<2:
flag=-1
for i in range(len(t1)):
if vis[t1[i]-1]==0:
vis[t1[i]-1]=1
c=dfs(t1[i])
if c==-1:
flag=-1
return flag
t=int(input(""))
for i in range(t):
n=int(input(""))
d={}
vis=[0]*n
for i in range(1,n+1):
d[i]=()
x = list(map(int, input("").split()))
for i in range(len(x)):
if (i+1) not in d[x[i]]:
d[x[i]]=d[x[i]]+(i+1,)
if (x[i]) not in d[i+1]:
d[i+1]=d[i+1]+(x[i],)
c3,c4=dfsvisit()
print(c3,c4)
Full text and comments »