#include<bits/stdc++.h>
using namespace std;
const int Max=10010;
struct node{
int l,r;
}s[Max];
int n,bestn,bestm,ord1[Max],ord2[Max];
bool read(int* a){
string l;
int x;
if(!getline(cin,l))return false;
stringstream ss(l);
n=0;
while(ss>>x)a[n++]=x;
return n>0;
}
int build(int L1,int R1,int L2,int R2){
if(L1>R1)return 0;
int root=ord2[R2],p=L1;
while(ord1[p]!=root)p++;
s[root].l=build(L1,p-1,L2,L2+p-L1-1);
s[root].r=build(p+1,R1,L2+p-L1,R2-1);
return root;
}
void dfs(int u,int sum){
sum+=u;
if(s[u].l==0&&s[u].r==0)
if(sum<bestm||bestm==sum&&bestn>u){
bestm=sum;
bestn=u;
}
if(s[u].l)dfs(s[u].l,sum);
if(s[u].r)dfs(s[u].r,sum);
}
int main(){
while(read(ord1)){
read(ord2);
build(0,n-1,0,n-1);
bestm=1e9;
dfs(ord2[n-1],0);
printf("%d\n",bestn);
}
return 0;
}
UVA 548
最新推荐文章于 2020-05-27 10:27:49 发布