Atcoder Regular Contest 117 D - Miracle Tree(分析性质+构造)
笑死,阴间语文作业到现在还没写完,为了在这个点保持精神,我只好来颓篇题解辣
我们考虑探究一下怎么最小化 \(\max\limits_{i=1}^nE_i\),我们假设 \(E_{p_1}<E_{p_2}<E_{p_3}<\cdots<E_{p_n}\),那么对于 \(i\in[1,n-1]\),根据题目条件显然有 \(\text{dist}(p_i,p_{i+1})\le E_{p_{i+1}}-E_{p_i}\),累加起来则有 \(\sum\limits_{i=1}^{n-1}\text{dist}(p_i,p_{i+1})\le \sum\limits_{i=1}^{n-1}E_{p_{i+1}}-E_{p_i}=E_{p_n}-E_{p_1}\),\(E_{p_n}\) 显然就是我们要求的最大值,而 \(E_{p_1}\) 我们肯定希望它越小越好,显然我们会令 \(E_{p_1}\),也就是说最小化 \(\max\limits_{i=1}^nE_i\) 就等价于最小化 \(\sum\limits_{i=1}^{n-1}\text{dist}(p_i,p_{i+1})\),也就是最短的这是一个非常经典的问题,注意到对于一棵树而言,如果我们要求一个以 \(s\) 开头 \(s\) 为根的回路,使其长度最小,那显然一边欧拉序即可,答案即为 \(2(n-1)\),那如果不强制起点和终点相同呢?不难发现这两种情况只差一条终点 \(\to\) 起点的路径,也就是说我们要让终点 \(\to\) 起点的长度尽可能大,那显然树的直径好了,也就是说答案就是 \(2(n-1)+1\) 减树的直径的长度,这个随便乱搞即可。构造就取每个点的 \(E_i\) 为以直径的某一端点为根的 DFS 序下 \(i\) 的入栈时间,正确性证明可借鉴树上莫队,复杂度线性。
const int MAXN=2e5;
int n,hd[MAXN+5],to[MAXN*2+5],nxt[MAXN*2+5],ec=0;
void adde(int u,int v){to[++ec]=v;nxt[ec]=hd[u];hd[u]=ec;}
int dep1[MAXN+5],dep2[MAXN+5],rt1,rt2;
void dfs1(int x,int f){
dep1[x]=dep1[f]+1;
for(int e=hd[x];e;e=nxt[e]) if(to[e]^f) dfs1(to[e],x);
}
void dfs2(int x,int f){
dep2[x]=dep2[f]+1;
for(int e=hd[x];e;e=nxt[e]) if(to[e]^f) dfs2(to[e],x);
}
bool has[MAXN+5];int son[MAXN+5];
void dfs3(int x,int f){
has[x]=(x==rt2);
for(int e=hd[x];e;e=nxt[e]){
int y=to[e];if(y==f) continue;
dfs3(y,x);if(has[y]) has[x]=1,son[x]=y;
}
}
int ans[MAXN+5],tim=0;
void dfs4(int x,int f){
ans[x]=++tim;
for(int e=hd[x];e;e=nxt[e]){
int y=to[e];if(y==f||y==son[x]) continue;
dfs4(y,x);tim++;
} if(son[x]) dfs4(son[x],x),tim++;
}
int main(){
scanf("%d",&n);
for(int i=1,u,v;i<n;i++) scanf("%d%d",&u,&v),adde(u,v),adde(v,u);
dfs1(1,0);for(int i=1;i<=n;i++) if(dep1[i]>dep1[rt1]) rt1=i;
dfs2(rt1,0);for(int i=1;i<=n;i++) if(dep2[i]>dep2[rt2]) rt2=i;
dfs3(rt1,0);dfs4(rt1,0);for(int i=1;i<=n;i++) printf("%d%c",ans[i],(i==n)?'\n':' ');
return 0;
}
Atcoder Regular Contest 117 D - Miracle Tree(分析性质+构造)的更多相关文章
- AtCoder Regular Contest 083 E - Bichrome Tree
题目传送门:https://arc083.contest.atcoder.jp/tasks/arc083_c 题目大意: 给定一棵树,你可以给这些点任意黑白染色,并且赋上权值,现给定一个序列\(X_i ...
- AtCoder Regular Contest 103 Problem D Robot Arms (构造)
题目链接 Problem D 给定$n$个坐标,然后让你构造一个长度为$m$的序列, 然后给每个坐标规定一个长度为$m$的序列,ULRD中的一个,意思是走的方向, 每次从原点出发按照这个序列方向,每 ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 095
AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 094
AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
- AtCoder Regular Contest 096
AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...
- AtCoder Regular Contest 097
AtCoder Regular Contest 097 C - K-th Substring 题意: 求一个长度小于等于5000的字符串的第K小子串,相同子串算一个. K<=5. 分析: 一眼看 ...
随机推荐
- 【UE4 C++ 基础知识】<5> 容器——TArray
概述 TArray 是UE4中最常用的容器类.其速度快.内存消耗小.安全性高. 其设计时未考虑扩展问题,因此建议在实际操作中勿使用 新建(new) 和 删除(delete) 创建或销毁 TArray ...
- Linux搭建SVN服务器详细教程
前言 本文讲解Linux系统下如何搭建SVN服务器,详细说明各配置项的功能,最终实现可管控多个项目的复杂配置. SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统 ...
- httpclient 登录成功后返回的cookie值访问下一页面
HttpClient4.x可以自带维持会话功能,只要使用同一个HttpClient且未关闭连接,则可以使用相同会话来访问其他要求登录验证的服务(见TestLogin()方法中的"执行get请 ...
- [敏捷软工团队博客]Beta阶段使用指南
软件工程教学实践平台使用指南 项目地址:http://20.185.223.195:8000/ 项目团队:the agiles 进入界面如图: 目录 软件工程教学实践平台使用指南 学生端 登录 iss ...
- Intellij IDEA 2021.2.3 最新版免费激活教程(可激活至 2099 年,亲测有效)
申明,本教程 Intellij IDEA 最新版破解.激活码均收集与网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除.如条件允许,建议大家购买正版. 本教程更新于:2021 年 10 月 ...
- 启动Dubbo项目注册Zookeeper时提示zookeeper not connected异常原理解析
文/朱季谦 遇到一个很诡异的问题,我在启动多个配置相同zookeeper的Dubbo项目时,其他项目都是正常启动,唯独有一个项目在启动过程中,Dubbo注册zookeeper协议时,竟然出现了这样的异 ...
- stm32学习笔记之串口通信
在基础实验成功的基础上,对串口的调试方法进行实践.硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中. b) 初始化函数定义: void USART_Confi ...
- uvm Register Access Methods(16)
转载: 译文:https://blog.csdn.net/zhajio/article/details/80731435 原文:http://cluelogic.com/2013/02/uvm-tut ...
- DeWeb --- Hello,World!
1.新建一个DLL,命名为hello.dpr 2.新增一个Form.(File->New->VCL Form - Delphi),建议不要更改单元名称和Form名称,即分别为unit1.p ...
- 绚丽的色彩从何而来_LOTO示波器实测WS2812B系LED光源
绚丽的色彩从何而来_LOTO示波器实测WS2812B系LED光源 不管你对 "RGB性能狂升300%" 的梗认同不认同,不可否认,绚丽的彩色很是酷炫,在现在市面上带"灯& ...