UVA 548(p155)----Tree

来源:互联网 发布:java中如何处理高并发 编辑:程序博客网 时间:2024/05/14 18:54
#include<bits/stdc++.h>using namespace std;const int INF=1e7;const int maxn=1e5;int n,ans,ansu;int lch[maxn],rch[maxn];int mid[maxn],last[maxn];int input(int*a){    string st;    if(!getline(cin,st)) return 0;    stringstream ss(st);    int tmp;    n=0;    while(ss>>tmp) a[n++]=tmp;    return n>0;}int build(int l1,int r1,int l2,int r2){    if(l1>r1) return 0;    int root=last[r2];    int p=l1;    while(mid[p]!=root) p++;    int num=p-l1;    lch[root]=build(l1,p-1,l2,l2+num-1);    rch[root]=build(p+1,r1,l2+num,r2-1);    return root;}void solve(int u,int sum){    sum+=u;    if(!lch[u]&&!rch[u])    {        if(sum<ans||(sum==ans&&ansu>u))        {            ansu=u;            ans=sum;        }    }    if(lch[u]) solve(lch[u],sum);    if(rch[u]) solve(rch[u],sum);}int main(){    ios::sync_with_stdio(0);    while(input(mid))    {        input(last);        build(0,n-1,0,n-1);        ansu=0;        ans=INF;        solve(last[n-1],0);        cout<<ansu<<endl;    }    return 0;}
题目地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=489
0 0
原创粉丝点击