Educational Codeforces Round 97 (Rated for Div. 2) D. Minimal Height Tree (贪心)
2024-08-26 00:09:05
题意:有一个从根节点\(BFS\)得来的序列(每次\(bfs\)子节点的时候保证是升序放入队列的),现在让你还原树(没必要和之前相同),问能构造出的最小的树的深度.
题解:不看根节点,我们从第二个位置开始,如果某一段元素升序,那么就让他们变为上一层某个结点的儿子,否则,如果上一层还有另外的父节点的话,就作为它的子儿子,如果没有父亲结点可以连的话,就只能去下一层了,具体实现的话,我们可以统计每层结点的个数,如果下一层出现了降序的情况,就减去之前统计的个数,不断往复即可.
代码:
int t;
int n;
int a[N];
int cnt[N];
int ans; int main() {
//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
scanf("%d",&t);
while(t--){
ans=1;
scanf("%d",&n);
for(int i=0;i<n;++i) scanf("%d",&a[i]);
int i=1;
cnt[0]=1;
while(i<n){
int now=cnt[ans-1]; //上一层的结点数
cnt[ans]=0;
while(now>0){
now--;
if(i==n) continue;
i++;
cnt[ans]++; //统计当前这一层的结点数
while(i<n && a[i]>a[i-1]){ //升序,全部连给上一层的某个结点
cnt[ans]++; //统计当前这一层的结点数
i++;
}
}
ans++;
}
printf("%d\n",ans-1);
}
return 0;
}
最新文章
- 开源一个练手小App, PrintableCheckList
- java中关于try、catch、finally中的细节分析
- Python入门笔记(11):集合
- Linux 下的另一个密码破解工具medusa
- 序列的方法(str,list,tuple)
- 【转】APUE学习1:迈出第一步,编译myls.c
- Contoso 大学 - 10 - 高级 EF 应用场景
- Altium Designer快捷键 【worldsing笔记】
- 对struts2的基本知识和环境的搭建(配图解)
- MySQL 索引优化全攻略
- Unsupported Media Type 415问题解决办法(Ajax)
- Android Library projetcts cannot be exported.
- java中可变长参数的定义及使用方法
- css坑了我一下下之line-height
- R语言读取EXCEL文件的各种方法
- 题解-USACO18DEC Sort It Out
- Linux 下终端 C 语言控制光标的技巧
- iframe 页面刷新
- ntp时间服务器--Linux配置
- HTML5 移动端 自定义点击事件