越靠近叶子越优先删掉

#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;
}

最新文章

  1. 帝国CMS视频
  2. 多态 oc c++ 与oc category
  3. 内存中 OLTP - 常见的工作负荷模式和迁移注意事项(一)
  4. Java基础之创建窗口——创建应用程序窗口(TryWindow)
  5. 表单重置reset
  6. LOG4J.PROPERTIES配置详解(转载)
  7. Php的安装与配置
  8. BZOJ 1729: [Usaco2005 dec]Cow Patterns 牛的模式匹配
  9. tlplayer for android V2.7(支持变速不变调) 2014-07-20更新
  10. mysql数据类型——整型INT(m)
  11. React-Native个人信息界面
  12. Android -&amp;gt; 怎样避免Handler引起内存泄露
  13. php zip文件内容比較类
  14. 如果不能显示真正的考验个别车型toast问题解决
  15. matlab中axis的使用
  16. CentOS7安装配置vncserver
  17. Install Oracle Tuxedo in silent mode
  18. cf438E. The Child and Binary Tree(生成函数 多项式开根 多项式求逆)
  19. vi 编辑器常用快捷键
  20. 透明度 rgba 和 opacity 的区别

热门文章

  1. 移动端之js控制rem,适配字体
  2. webpack.config.js====插件html-webpack-plugin
  3. 模板引擎doT.js
  4. 【复习笔记】CSS基础
  5. HoloLens | 世界的每一次变化,其实都提前打好了招呼
  6. Jmeter进行接口的性能测试
  7. python+selenium之多表单切换
  8. 用GWT开发的HelloGWT程序
  9. noip模拟赛#45
  10. Elastic Search Java Api 创建索引结构,添加索引