UVA548 树 Tree

鬼畜读入。。。

stringstream的使用

如果多条路径和相同的话,输出叶子结点上值较小的一个。

const int N=10010;
string inorder,postorder;
int in[N],post[N];
int pos[N];
int n;
int minsum;
int ans;

void build(int inl,int postl,int n,int sum)
{
    if(!n) return;
    if(n == 1)
    {
        if(sum + in[inl] < minsum)
        {
            minsum=sum+in[inl];
            ans=in[inl];
        }
        return;
    }

    int root=post[postl+n-1];
    int k=pos[root];
    int len=k-inl;

    build(inl,postl,len,sum+root);
    build(k+1,postl+len,n-1-len,sum+root);
}

int main()
{
    while(getline(cin,inorder))
    {
        getline(cin,postorder);

        stringstream ss(inorder);
        n=0;
        int x;
        while(ss>>x)
            in[n++]=x;

        ss.clear();
        ss.str(postorder);
        n=0;
        while(ss>>x)
            post[n++]=x;

        for(int i=0;i<n;i++) pos[in[i]]=i;

        minsum=INF;

        build(0,0,n,0);

        cout<<ans<<endl;
    }

    //system("pause");
    return 0;
}
posted @ 2021-01-25 17:38  Dazzling!  阅读(41)  评论(0编辑  收藏  举报