class Myclass(object):
class Node(object):
def __init__(self,father,num,val,avg):
self.father=father
self.num=num
self.val=val
self.avg=avg
def make_struct(self,father,num,val,avg):
return self.Node(father,num,val,avg)
myclass=Myclass()
no=[]
line=[]
def find(n,root):
res=-1
pos=0
for i in range(1,n+1):
if i is not root and no[i].avg > res:
res=no[i].avg
pos=i
return pos
while True:
n,root=map(int,input().split())
if n==0 and root==0:
break
ans=0
line.clear()
line=list(map(int,input().split(" ")))
no.clear()
no.append(myclass.make_struct(0,0,0,0.0))
for i in range(1,n+1):
val=line[i-1]
avg=float(val)
num=1
no.append(myclass.make_struct(0,num,val,avg))
ans+=no[i].val
for i in range(1,n):
a,b=map(int,input().split())
no[b].father=a
for i in range(1,n):
f=find(n,root)
father=no[f].father
ans+=no[father].num*no[f].val
no[f].avg=-1.0
for j in range(1,n+1):
if no[j].father is f:
no[j].father=father
no[father].num+=no[f].num
no[father].val+=no[f].val
no[father].avg=no[father].val/no[father].num
print(ans)