AT2172 Shik and Travel
题目描述:
题解:
二分+暴力$vector$+$dfs$。
记录下所有可能的子树内合法方案,双指针+归并合并。
代码:
#include<vector>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = ;
template<typename T>
inline void read(T&x)
{
T f = ,c = ;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
x = f*c;
}
int n,fa[N],ch[N][];
ll v[N],dep[N];
void DFS(int u)
{
if(!ch[u][])return ;
dep[ch[u][]]=dep[u]+v[ch[u][]],DFS(ch[u][]);
dep[ch[u][]]=dep[u]+v[ch[u][]],DFS(ch[u][]);
}
struct Pair
{
ll x,y;
Pair(){}
Pair(ll x,ll y):x(x),y(y){}
}g1[N],g2[N],g[N];
vector<Pair>ve[N];
ll mid;
int Merge(int len)
{
int i = ,j = len,k = ;
while(i<=len&&j>=)
{
if(g1[i].x<=g2[j].x)g[++k]=g1[i++];
else g[++k]=g2[j--];
}
while(i<=len)g[++k]=g1[i++];
while(j>=)g[++k]=g2[j--];
return k;
}
void dfs(int u)
{
if(!ch[u][]){ve[u].push_back(Pair(dep[u],dep[u]));return ;}
int ls = ch[u][],rs = ch[u][];
dfs(ls),dfs(rs);int k=;
if(ve[ls].size()>ve[rs].size())swap(ls,rs);
for(int i=,j=-,l1=ve[ls].size(),l2=ve[rs].size();i<l1;i++)
{
while(j<l2-&&ve[ls][i].y+ve[rs][j+].x-2ll*dep[u]<=mid)j++;
if(~j)g1[++k]=Pair(ve[ls][i].x,ve[rs][j].y),g2[k]=Pair(ve[rs][j].y,ve[ls][i].x);
}
int len = Merge(k);
for(int i=;i<=len;i++)
if(i==||g[i].y<g[i-].y)
ve[u].push_back(g[i]);
}
bool check()
{
for(int i=;i<=n;i++)
ve[i].clear();
dfs();
return (int)ve[].size()>;
}
int main()
{
read(n);
for(int i=;i<=n;i++)
{
read(fa[i]),read(v[i]);
if(!ch[fa[i]][])ch[fa[i]][]=i;
else ch[fa[i]][]=i;
}
DFS();
ll l = ,r = 200000ll*n,ans = r;
while(l<=r)
{
mid = (l+r)>>;
if(check())ans=mid,r=mid-;
else l=mid+;
}
printf("%lld\n",ans);
return ;
}
AT2172 Shik and Travel的更多相关文章
- 【AtCoder Grand Contest 007E】Shik and Travel [Dfs][二分答案]
Shik and Travel Time Limit: 50 Sec Memory Limit: 512 MB Description 给定一棵n个点的树,保证一个点出度为2/0. 遍历一遍,要求每 ...
- AGC007E Shik and Travel 解题报告
AGC007E Shik and Travel 题目大意:\(n\) 个点的二叉树,每个点要么两个儿子,要么没有儿子,每条边有边权. 你从 \(1\) 号节点出发,走到一个叶子节点.然后每一天,你可以 ...
- [AT2172] [agc007_e] Shik and Travel
题目链接 AtCoder:https://agc007.contest.atcoder.jp/tasks/agc007_e 洛谷:https://www.luogu.org/problemnew/sh ...
- AtCoder Grand Contest 007 E:Shik and Travel
题目传送门:https://agc007.contest.atcoder.jp/tasks/agc007_e 题目翻译 现在有一个二叉树,除了叶子每个结点都有两个儿子.这个二叉树一共有\(m\)个叶子 ...
- [AGC007E] Shik and Travel
题目 给定一棵n节点的 以1为根的 满二叉树 (每个非叶子节点恰好有两个儿子)n−1 条边. 第ii条边连接 i+1号点 和 ai, 经过代价为vi设这棵树有m个叶子节点定义一次合法的旅行为:(1) ...
- AtCoder AGC007E Shik and Travel (二分、DP、启发式合并)
题目链接 https://atcoder.jp/contests/agc007/tasks/agc007_e 题解 首先有个很朴素的想法是,二分答案\(mid\)后使用可行性DP, 设\(dp[u][ ...
- [atAGC007E]Shik and Travel
二分枚举答案,判定答案是否合法 贪心:每一个叶子只能经过一遍,因此叶子的顺序一定是一个dfs序,即走完一棵子树中的所有叶子才会到子树外 根据这个贪心可以dp,设$f[k][l][r]$表示仅考虑$k$ ...
- 贪心/构造/DP 杂题选做Ⅲ
颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...
- AtCoder Grand Contest 007
AtCoder Grand Contest 007 A - Shik and Stone 翻译 见洛谷 题解 傻逼玩意 #include<cstdio> int n,m,tot;char ...
随机推荐
- css文本之蛇
文本之蛇 css把文本当做一行来处理,把他们放在一个看不见的盒子里面.盒子遇到容器的外边界会折行.所有的文本属性都应用于这个盒子,而不是包含文本的容器. 最有用的8个文本属性 文本缩进(text-in ...
- C# 面向对象之面向接口
接口的定义 与类不同的是接口用interface关键字 (1)接口中所有成员不能添加任何修饰符,默认为public,如果显示指定修饰符将会出现编译错误; (2)接口中不能包含字段.运算符重载.实例构造 ...
- wawawa8的模板复习计划
wawawa8的模板复习计划 数据结构 //手写堆 [link][https://www.luogu.org/problemnew/show/P3378] //并查集 [link][https://w ...
- python入门之实例-验证码
需求: 随机生成6位的验证码,要求有字母和数字 import random temp = "" for i in range(6): j = random.randrange(0, ...
- python里面的list、tuple和dict的区别
Dictionary .Dictionary是Python中内置的数据类型之一,他定义了键和值之间一对一的关系. 每一个元素都有一个key-value对,整个元素集合用大括号{}括起来. 你可以通过k ...
- centos7安装mysql5.7 使用yum
https://blog.csdn.net/z13615480737/article/details/78906598 使用yum,比较简单,不用考虑版本依赖问题
- Nginx 开启多核cpu配置
nginx默认是没有开启利用多核cpu的配置的.需要通过增加worker_cpu_affinity配置参数来充分利用多核cpu; 需要在nginx配置里添加 worker_processes 和 or ...
- Linux scp 命令使用方法
scp 命令: 1.将本地文件拷贝到远程:scp 文件名 用户名@计算机IP或者计算机名称:远程路径 2.从远程将文件拷回本地:scp 用户名@计算机IP或者计算机名称:文件名 本地路径 3.将本 ...
- JSP文件上传,好烦啊、、
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- 一张图告诉你,只会NodeJS还远远不够!
NodeJS看似小巧简单,却威力无边,一张图,秒懂!!! 可能很多人还不会安装,但至少已经会了javascript,或者至少会了jquery,那么js还可以干更多的事情!js还可以干更多的事情!js还 ...