UVA - 10410 Tree Reconstruction C++

题目:https://odzkskevi.qnssl.com/b080f15130ed0e43b4c0769fe4c61dff?v=1531969963

思路:

参考了https://blog.csdn.net/keshuai19940722/article/details/38778243https://www.cnblogs.com/jerryRey/p/4622927.html

代码:

#include<iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;

const int maxn = 1005;
int N, pos[maxn];
vector<int> g[maxn];

int main()
{
    int x;
    stack<int> s;
    while(scanf("%d",&N)!=EOF)
    {
        for(int i=1;i<=N;i++)
        {
            scanf("%d",&x);
            pos[x]=i;
            g[i].clear();
        }
        int root;
        scanf("%d",&root);
        s.push(root);
        for(int i=1;i<N;i++)
        {
            scanf("%d",&x);
            while(true)
            {
                int u=s.top();
                if(u==root||pos[u]+1<pos[x])
                {
                    g[u].push_back(x);
                    s.push(x);
                    break;
                }
                else{
                    s.pop();
                }
            }
        }
        for(int i=1;i<=N;i++)
        {
            printf("%d:",i);
            for(int j=0;j<g[i].size();j++)
            {
                cout<<g[i][j]<<" ";
            }
            cout<<endl;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zero_979/article/details/81167860