https://atcoder.jp/contests/arc117/tasks/arc117_d


思路:

比较明显的是树的直径把。

然后构造:先从树的直径开始1,2,3...

如果有分枝,先跑完分枝,然后到叶子了+1

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=2e5+100;
typedef long long LL;
inline LL read(){LL x=0,f=1;char ch=getchar();   while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
LL ans[maxn],fat[maxn];
bool used[maxn],vis[maxn];
vector<LL>g[maxn];
LL d=0,maxv=-1;
LL tot=0;
void dfs1(LL u,LL fa,LL dis){if(dis>maxv){d=u;maxv=dis;}for(LL i=0;i<g[u].size();i++){LL v=g[u][i];if(v==fa) continue;fat[v]=u;dfs1(v,u,dis+1);}
}
void dfs(LL u,LL fa){ans[u]=++tot;vis[u]=true;vector<LL>v1;for(LL i=0;i<g[u].size();i++){LL v=g[u][i];if(v==fa||vis[v]) continue;if(!used[v]) dfs(v,u);///先寻找该节点上的不在树的直径上的点else v1.push_back(v);}if(v1.size()){for(auto i:v1){if(!vis[i]) dfs(i,u);}return;}tot++;///非直径上的点的一个叶子访问完了+1
}
int main(void){cin.tie(0);std::ios::sync_with_stdio(false);LL n;cin>>n;for(LL i=1;i<n;i++){LL u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}dfs1(1,0,0);LL st=d;maxv=-1;fat[st]=0;dfs1(st,0,0);for(LL i=d;i!=0;i=fat[i]){used[i]=true;}dfs(d,0);for(LL i=1;i<=n;i++){cout<<ans[i]<<" ";}cout<<"\n";return 0;
}

D - Miracle Tree(思维+构造+树的直径)相关推荐

  1. C#结合Jquery LigerUI Tree插件构造树

    Jquery LigerUI Tree是Jquery LigerUI()的插件之一,使用它可以快速的构建树形菜单.呵呵 废话不说了,直入正题,下面介绍C#结合ligerui 构造树形菜单的两种方法 1 ...

  2. Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造

    传送门 文章目录 题意: 思路: 题意: 给你n,dn,dn,d,让你构造有nnn个点的二叉树,他们每个节点深度和为ddd. n,d≤3000n,d\le 3000n,d≤3000. 思路: 先考虑不 ...

  3. HDU - 5573 Binary Tree(思维+构造+二进制)

    题目链接:点击查看 题目大意:给出一棵无限大的完全二叉树,每次给出一个 n 和一个 k ,要求从点 1 出发一直向下,找到一条长度为 k 的路径,对于路径上的点可以加上其编号,也可以减去其编号,需要构 ...

  4. 【VK Cup 2016 - Round 1 (Div 2 Edition)C】【构造】Bear and Forgotten Tree 3 构造一棵树直径为d且点1的深度为h

    Bear and Forgotten Tree 3 time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  5. 【树的直径】解题报告: luogu P3629 [APIO2010]巡逻(树的直径,位运算成对变换,思维)

    题目链接:P3629 [APIO2010]巡逻 首先看题,从1号结点开始,全部遍历并回到1号结点会恰好经过所有的边两次,这样总长度为 2∗(n−1)2*(n-1)2∗(n−1). 那么如果建立一条路以 ...

  6. CodeForces-734E Anton and Tree 树的直径

    题目大意: 给定一棵有n个节点的树,有黑点白点两种节点. 每一次操作可以选择一个同种颜色的联通块将其染成同一种颜色 现在给定一个初始局面问最少多少步可以让树变为纯色. 题解: 首先我们拿到这棵树时先将 ...

  7. 【HDU - 5886】Tower Defence(树的直径,思维,dp)

    题干: There was a civil war between two factions in Skyrim, a province of the Empire on the continent ...

  8. POJ 1849 Two(树的直径+思维)

    题目链接:http://poj.org/problem?id=1849        题意是有n个点,n-1条边(树形图),在s点放两个机器人,问这两个机器人遍历完所有的点的最少花费(不用回到原点). ...

  9. Book of Evil(树的直径+思维)

    Book of Evil Paladin Manao caught the trail of the ancient Book of Evil in a swampy area. This area ...

  10. 牛客 - 王国(虚树+树的直径)

    题目链接:点击查看 题目大意:给出 n 个点组成的一棵树,每个节点都有一个权值,现在规定权值相同的节点之间,简单路径的边数为 x ,求 x * x 的最大值 题目分析:真的很巧,上周刚学的虚树,读完这 ...

最新文章

  1. tokenizer.encode() 与 tokenizer.tokenize()对比,言简意赅 转 高人讲学
  2. VSCode 小鸡汤 第00期 —— 安装和入门
  3. SQL Server全系列安装程序V1.2中文版
  4. 除非得到你的首肯,否则别人无法伤害你——Leo网上答疑(20)
  5. hash redis springboot_Redis常见的工作场景使用实战,Redisson分布式锁的实现
  6. 树莓派 神经网络植入_使用自动编码器和TensorFlow进行神经植入
  7. javascript 数字精度问题
  8. SpringCloud微服务架构学习(二)常见的微服务架构
  9. OpenShift 4之评估节点自消耗的系统资源
  10. 【Caffe安装】Ubuntu14.04上Caffe配置安装(Only CPU)
  11. 瀚云平台kafka简单原理
  12. 说说PMO 的工作思路
  13. 深度学习--二值神经网络BNN基础概念学习总结+官方代码解析
  14. 金融反欺诈的底层逻辑
  15. mysql frm myd myi 恢复_恢复 - 如何从.myd,.myi,.frm文件恢复MySQL数据库
  16. unity3d meshBaker 基本的使用
  17. 【OpenGL ES】EGL+FBO离屏渲染
  18. Blockchains Distributed L week3 爱宝授课记录(2)
  19. 集智全球开源 聚合中国力量 Tungsten Fabric中文社区成立大会暨社区第一次全员大会成功举行
  20. QQ音乐推荐歌单API报错 invalid referer

热门文章

  1. [HTML]北京邮电大学信息与通信工程学院选课参考指南
  2. 蒸鱼的七�秘密八�做法 【精美�文】
  3. python判断生肖
  4. 软件安全之动态链接库的使用 Libzplay 播放音乐
  5. php 协成wifi_2016最新协成wifi认证系统二次开发版源码 支持中文ssid 无加密无限制...
  6. 【视频分享】尚硅谷Java视频教程_SpringBoot视频教程
  7. 携手Wi-SUN联盟,利尔达助Wi-SUN落地生花
  8. sas 结果导出到excel 打不开解决办法
  9. Android9.0 power键功能定义配置方法
  10. 2019牛客暑期多校训练营(第八场) Beauty Values