「AGC034E」 Complete Compress

显然可以枚举根。

然后把某两棵棋子同时往深度浅的方向提,即对不存在祖先关系的两个棋子进行操作。

如果能到达那么就更新答案。

问题转化为如何判定能够到达。

考虑对于某一个节点,合法的条件是什么。

设 \(f_u\) 为以 \(u\) 为根的子树中的棋子还需要移动多少步,容易发现对于节点 \(u\) 的所有孩子 \(v\),若存在一个 \(x\) 有 \(f_x>(\sum f_v)-f_x\),那么 \(f_x\) 一定不能移动完。

然后根据这个东西随便 \(\texttt{DP}\) 转移一下就行。

似乎存在更优秀的做法。

/*---Author:HenryHuang---*/
/*---Never Settle---*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
char s[maxn];
int w[maxn],dep[maxn];
int f[maxn],siz[maxn];
vector<int> e[maxn];
void dfs(int u,int fa){
dep[u]=dep[fa]+1;dep[u]=f[u]=0,siz[u]=w[u];
int son=0;
for(auto v:e[u]){
if(v==fa) continue;
dfs(v,u);
siz[u]+=siz[v];dep[u]+=dep[v];
if(f[v]>f[son]) son=v;
}
f[u]=(f[son]<=dep[u]-dep[son]?dep[u]&1:f[son]-(dep[u]-dep[son]));
dep[u]+=siz[u],f[u]+=siz[u];
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n;cin>>n;
cin>>(s+1);
for(int i=1;i<=n;++i) w[i]=s[i]-'0';
for(int i=1;i<n;++i){
int a,b;cin>>a>>b;
e[a].emplace_back(b);
e[b].emplace_back(a);
}
int ans=998244353;
for(int i=1;i<=n;++i){
dep[0]=-1;
dfs(i,0);
if(f[i]==siz[i]) ans=min(ans,(dep[i]-siz[i])/2);
}
if(ans==998244353) cout<<-1<<'\n';
else cout<<ans<<'\n';
return 0;
}

「AGC034E」 Complete Compress的更多相关文章

  1. 「CF716D」Complete The Graph「最短路」

    题意 给定一个\(n\)个点\(m\)条边的无向图,有一些边权暂时为\(0\),你需要分配一个\([1, 10^{18}]\)的数.最终使得\(s\)到\(t\)最短路为\(L\),输出一个可行的分配 ...

  2. 【微信小程序】开发实战 之 「配置项」与「逻辑层」

    微信小程序作为微信生态重要的一环,在实际生活.工作.商业中的应用越来越广泛.想学习微信小程序开发的朋友也越来越多,本文将在小程序框架的基础上就微信小程序项目开发所必需的基础知识及语法特点进行了详细总结 ...

  3. 「MoreThanJava」Java发展史及起航新世界

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  4. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  5. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  6. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  7. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  8. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  9. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

随机推荐

  1. idea-创建web.xml模板

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="htt ...

  2. [leetcode] 35. 搜索插入位置(Java)(二分)

    35. 搜索插入位置 二分,太简单,没啥好说的 class Solution { public int searchInsert(int[] nums, int target) { if (nums. ...

  3. 电脑华硕A455L系列,机械硬盘换成固态硬盘,光驱位改放机械硬盘

    电脑一直以来都很卡,直到最近用的不舒服了,就去查查原因,发现是磁盘读取爆表!只好想起来换固态硬盘,光驱改放机械硬盘... 买的固态硬盘是个杂牌军,但是店家说工艺不错,只好将信将疑,用用再说吧. 首先确 ...

  4. Angel图算法

    Angel图算法 [2.0]CommonFriends 计算两个好友的共同好友数,某种程度上可以刻画两个节点之间的紧密程度. 输入 输入数据路径:输入文件所在路径,无权网络数据, 数据格式为两列 sr ...

  5. MindSpore模型精度调优实践

    MindSpore模型精度调优实践 引论:在模型的开发过程中,精度达不到预期常常让人头疼.为了帮助用户解决模型调试调优的问题,为MindSpore量身定做了可视化调试调优组件:MindInsight. ...

  6. 3D车道线检测:Gen-LaneNet

    3D车道线检测:Gen-LaneNet Gen-LaneNet: A Generalized and Scalable Approach for 3D Lane Detection 论文链接:http ...

  7. Geo-CNN的三维点云

    Geo-CNN的三维点云 Modeling Local Geometric Structure of 3D Point Clouds using Geo-CNN 摘要 深度卷积神经网络(CNNs)的最 ...

  8. Cuda Stream流分析

    Cuda Stream流分析 Stream 一般来说,cuda c并行性表现在下面两个层面上: Kernel level Grid level Stream和event简介 Cuda stream是指 ...

  9. git stash的常用操作

    列出stash的:      git stash list移除stash:         git stash drop stash@{0}查看stash:         git stash sho ...

  10. 「题解」300iq Contest 2 H. Honorable Mention

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:gym102331H. 题意概述 给定一个长度为 \(n\) 的序列 \(a\),有 \(q\) 次询问,每次询问给定三个 ...