UVa 10410 - Tree Reconstruction(树)

很久之前跳过去了这道题,现在看没什么难度,给出一个树的BFS和DFS的序列,输出这棵树。
用BFS顺序去分离DFS,然后记录每个结点的子结点就好了。这道题不清空vector居然是PE,而不是WA。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=1010;
vector<int> tree[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;
for(int i=0;i<n;++i) scanf("%d",&k),pos[k]=i,tree[i].clear();
scanf("%d",&dfs[0]);
for(int i=1;i<n;++i){
scanf("%d",&p);
while(q&&pos[p]<=pos[dfs[q]]+1) --q;
tree[dfs[q]-1].push_back(p);
dfs[++q]=p;
}
for(int i=0;i<n;++i){
printf("%d:",i+1);
for(int j=0;j<tree[i].size();++j)
printf(" %d",tree[i][j]);
printf("\n");
}
}
return 0;
}

** 本文迁移自我的CSDN博客,格式可能有所偏差。 **