#include <iostream>
using namespace std;
const int maxn=1005;
struct Node{
int c,t,pre;
double w;
};
struct Node pp[maxn];
int find_node(int n,int r)
{
int ans;
double v=-100;
for(int i=1;i<=n;i++)
{
if(i==r) continue;
if(pp[i].w>v)
{
v=pp[i].w;
ans=i;
}
}
return ans;
}
int main()
{
int n,r,a,b,p;
while(cin>>n>>r)
{
int ans=0,m;
if(n==0&&r==0) break;
else{
for(int i=1;i<=n;i++)
{
cin>>pp[i].c;
pp[i].t=1;
pp[i].w=pp[i].c;
ans+=pp[i].c;
}
for(int i=0;i<n-1;i++)
{
cin>>a>>b;
pp[b].pre=a;
}
for(int i=0;i<n-1;i++)
{
m=find_node(n,r);
pp[m].w=0;
p=pp[m].pre;
ans+=pp[m].c*pp[p].t;
for(int j=1;j<=n;j++)
if(pp[j].pre==m)
pp[j].pre=p;
pp[p].t+=pp[m].t;
pp[p].c+=pp[m].c;
pp[p].w=double(pp[p].c/pp[p].t);
}
}
cout<<ans<<endl;
}
return 0;
}

京公网安备 11010502036488号