当前位置: 代码迷 >> 综合 >> Codeforces 1437D Minimal Height Tree
  详细解决方案

Codeforces 1437D Minimal Height Tree

热度:13   发布时间:2024-03-09 13:23:59.0

题意:给一个数组,这个数组是一棵树的BFS序列,每个节点的子节点必然从小到大遍历。请构造一棵树满足这个序列并且深度最小,输出深度

思路:
由于每个节点的子节点必然从小到大遍历,因此对于一段严格单增的区间,必然是放在同一个父节点下面最好。那么我们进行贪心,对于根节点,我们往里面放入第一段区间,然后记录其中的节点有多少个记录为p[1],对于接下去的p[1]个区间,我们都可以放在这个区间的下面,然后把这些放进去的所有区间总共有多少个记录为p[2]…以此类推,直到放完为止。最后输出我们的层数即可。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int h[200005];
int main()
{int t;cin >> t;while (t--){int n;cin >> n;int pre, x;cin >> pre, n--;int remain = 1;int ptr = 1;memset(h, 0, sizeof(h));h[0] = 1;//cout<<"1 ";while (n--){cin >> x;if (x < pre)h[ptr - 1]--;if (h[ptr - 1] == 0)ptr++;//cout<<ptr<<" ";pre = x;h[ptr]++;}//cout<<endl;cout << ptr << endl;}
}

本题错误记录:上界记录错误,二十万写成了十万。

  相关解决方案