cf963b Destruction of a Tree
2024-08-29 21:10:13
越靠近叶子越优先删掉
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
int n, uu, hea[200005], cnt, deg[200005], fa[200005];
bool vis[200005];
vector<int> shu;
vector<int> ans;
struct Edge{
int too, nxt;
}edge[400005];
void add_edge(int fro, int too){
edge[++cnt].nxt = hea[fro];
edge[cnt].too = too;
hea[fro] = cnt;
}
void dfs(int x, int f){
shu.push_back(x);
fa[x] = f;
for(int i=hea[x]; i; i=edge[i].nxt){
int t=edge[i].too;
if(t!=f) dfs(t, x);
}
}
void shanchu(int x){
vis[x] = true;
ans.push_back(x);
for(int i=hea[x]; i; i=edge[i].nxt){
int t=edge[i].too;
deg[t]--;
if(t!=fa[x] && !vis[t]){
if(deg[t]%2==0)
shanchu(t);
}
}
}
int main(){
cin>>n;
for(int i=1; i<=n; i++){
scanf("%d", &uu);
if(!uu) continue;
add_edge(uu, i);
add_edge(i, uu);
deg[i]++; deg[uu]++;
}
dfs(1, 0);
for(int i=shu.size()-1; i>=0; i--){
int x=shu[i];
if(/*vis[x] ||*/deg[x]&1) continue;
shanchu(x);
}
if(ans.size()!=n) printf("NO\n");
else{
printf("YES\n");
for(auto i:ans) printf("%d\n", i);
}
return 0;
}
最新文章
- 帝国CMS视频
- 多态 oc c++ 与oc category
- 内存中 OLTP - 常见的工作负荷模式和迁移注意事项(一)
- Java基础之创建窗口——创建应用程序窗口(TryWindow)
- 表单重置reset
- LOG4J.PROPERTIES配置详解(转载)
- Php的安装与配置
- BZOJ 1729: [Usaco2005 dec]Cow Patterns 牛的模式匹配
- tlplayer for android V2.7(支持变速不变调) 2014-07-20更新
- mysql数据类型——整型INT(m)
- React-Native个人信息界面
- Android -&;gt; 怎样避免Handler引起内存泄露
- php zip文件内容比較类
- 如果不能显示真正的考验个别车型toast问题解决
- matlab中axis的使用
- CentOS7安装配置vncserver
- Install Oracle Tuxedo in silent mode
- cf438E. The Child and Binary Tree(生成函数 多项式开根 多项式求逆)
- vi 编辑器常用快捷键
- 透明度 rgba 和 opacity 的区别