#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; }