zoukankan      html  css  js  c++  java
  • UVA 10410 Tree Reconstruction

    题意:

      给定一个树的BFS和DFS,求这棵树。

    分析:

      拿dfs的序列,分成若干段,每一段相当一个子树,这样就可以利用bfs的序列去将dfs的序列分段,然后利用一个队列去存放每一段,不断求出子树即可。

    代码:

      

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <vector>
    #include <algorithm>
    using namespace std;
    const int maxn=1010;
    vector<int>g[maxn];
    int pos[maxn],dfs[maxn],n;
    int main()
    {
    while(~scanf("%d",&n))
    {
    memset(pos,0,sizeof(pos));
    memset(dfs,0,sizeof(dfs));
    int k,p,q=0;
    int i;
    for(i=0;i<n;++i)
    scanf("%d",&k),pos[k]=i,g[i].clear();
    scanf("%d",&dfs[0]);
    for(i=1;i<n;i++)
    {
    scanf("%d",&p);
    //cout<<q<<endl;
    while(q&&pos[p]<=pos[dfs[q]]+1)
    --q;
    //cout<<q<<endl;
    g[dfs[q]-1].push_back(p);
    dfs[++q]=p;
    }
    for(i=0;i<n;i++)
    {
    printf("%d:",i+1);
    for(int j=0;j<g[i].size();++j)
    printf(" %d",g[i][j]);
    printf(" ");
    }
    }
    }
  • 相关阅读:
    python基础 列表生成式
    docker 基础
    xpath例子
    redis删除以什么开头的key
    redis 关闭持久化
    python爬虫 保存页面
    python爬虫操作cookie
    SQl函数的写法
    加料记录(大屏幕)
    ios 调试
  • 原文地址:https://www.cnblogs.com/137033036-wjl/p/4890037.html
Copyright © 2011-2022 走看看