[LOJ 6042]「雅礼集训 2017 Day7」跳蚤王国的宰相(树的重心+贪心)

[LOJ 6042]「雅礼集训 2017 Day7」跳蚤王国的宰相

description

solution

一个到所有节点距离和最小的节点 ⇔\Leftrightarrow 树的重心(满足最重的儿子最轻,每个儿子siz≤n2\le\frac{n}{2}2n

显然原树的重心答案为0

对于点iii,若要成为新的重心

贪心地有,从原重心的最大儿子边开始断,然后直接接在iii

此时把iii提起来当根,则有原来的子树仍不变,断掉的若干个子树接在下面,剩下的所有点为一个子树

如果原重心断的子树节点达到/超过n2\frac{n}{2}2n,则一定是可以使任意一个iii成为新重心的(剩下节点数不到一半,符合重心设定)

最后的答案一定是cnt/cnt−1,cntcnt/cnt-1,cntcnt/cnt1,cnt表示重心断的子树个数

1的出入是因为有些点可能自己的sizsizsiz足够大,不需要断这么多

在这里插入图片描述

如图:红边,黄边为被断子树(黄边为最后一个被断子树)

  • iii属于被断子树内(第一个红点)

    先不断这个子树,断另外的cnt-1个子树,此时需要判断总点数n−n-n其子树siz[i]−siz[i]-siz[i]断掉的子树used=used=used=剩下的子树是否>n2>\frac{n}{2}>2n,超过再断iii所在rootrootroot的子树

  • iii属于残留子树(第二个红点)

    先不断第cnt被断子树(这样剩下连在一起的子树节点才最小,才更有可能少断一条边),同样的判断

code

#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 1000005
vector < int > G[maxn];
int n, rt, minn, cnt;
int siz[maxn], ans[maxn];void dfs( int u, int fa ) {siz[u] = 1;int max_size = 0;for( int i = 0;i < G[u].size();i ++ ) {int v = G[u][i];if( v == fa ) continue;else dfs( v, u );siz[u] += siz[v];max_size = max( max_size, siz[v] );}max_size = max( max_size, n - siz[u] );if( max_size < minn ) {minn = max_size;rt = u;}
} int GetRoot() {minn = 0x7f7f7f7f;dfs( 1, 0 );return rt;
}bool cmp( const int x, const int y ) {return siz[x] > siz[y];
}void solve( int u, int fa, int used ) {ans[u] = cnt + ( ( ( n - siz[u] - used ) << 1 ) > n );for( int i = 0;i < G[u].size();i ++ ) {int v = G[u][i];if( v == fa ) continue;else solve( v, u, used );}
}int main() {scanf( "%d", &n );for( int i = 1, u, v;i < n;i ++ ) {scanf( "%d %d", &u, &v );G[u].push_back( v );G[v].push_back( u );}int root = GetRoot();dfs( root, 0 );sort( G[root].begin(), G[root].end(), cmp );int tot = 0;for( int i = 0;i < G[root].size();i ++ ) {tot += siz[G[root][i]];if( ( tot << 1 ) >= n ) break;cnt ++;}for( int i = 0;i < G[root].size();i ++ )solve( G[root][i], root, tot - max( siz[G[root][i]], siz[G[root][cnt]] ) );for( int i = 1;i <= n;i ++ )printf( "%d\n", ans[i] );return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

由优劣语言之争引起的思考

由优劣语言之争引起的思考#欲使其灭亡&#xff0c;必使其疯狂昨天上午由阿里云中间件公众号和架构师小秘圈公众号发布的一篇文章《天天敲代码会使人变聪明么》在.net开发者中掀起了一阵巨浪&#xff0c;文章中提到的语言的先进与落后之争让基于.net开发者们义愤填膺&#xff0c…

[LOJ #521]「LibreOJ β Round #3」绯色 IOI(抵达)(结论)

#521. 「LibreOJ β Round #3」绯色 IOI&#xff08;抵达&#xff09; description solution 因为点的庇护所不能为自身&#xff0c;题目背景在树上&#xff0c;有结论一定是两个相邻点互为庇护所 所以树一定要能两两完美匹配才有解 判断完有解后就是构造解了&#xff0c;…

微软是如何使用 C# 重写 C# 编译器并将其开源的

Roslyn 是 C# 和 Visual Basic.NET 开源编译器的代号。这篇文章将介绍它是如何从微软过去的十年至暗时刻走出来&#xff0c;成为开源跨平台的 C# 和 VB 公共语言引擎。我于 2005 年加入微软&#xff0c;也就是在.NET 2.0 发布之前&#xff0c;当时微软内部已经开始在讨论 Rosly…

P3332 [ZJOI2013]K大数查询(整体二分做法)

P3332 [ZJOI2013]K大数查询 题意: 题解&#xff1a; 利用整体二分来做&#xff0c;这个题和P3834 【模板】可持久化线段树 2的区别在于本题的修改是区间修改&#xff0c;所以将里面的树状数组改成线段树就行&#xff0c;区间修改区间查询 但是不知道为什么我调了一阵子也不对…

[APIO2020]交换城市(交互+kruskal重构树)

[APIO2020]交换城市 description solution 如果u,vu,vu,v存在于一条链上&#xff08;只有两个点度数为111其余点度数为222&#xff09;则无解&#xff0c;否则必有解 如图&#xff0c;不管是哪个点度数>2>2>2&#xff0c;都可以有解 以蓝色为例&#xff0c;第二个…

如何在ASP.NET Core程序启动时运行异步任务(1)

原文&#xff1a;Running async tasks on app startup in ASP.NET Core (Part 1)作者&#xff1a;Andrew Lock译者&#xff1a;Lamond Lu背景当我们做项目的时候&#xff0c;有时候希望自己的ASP.NET Core应用在启动前执行一些初始化逻辑。例如&#xff0c;你希望验证配置是否合…

扫描线讲解

参考文章&#xff1a; 线段树扫描线&#xff08;有关扫描线的理解&#xff09; 线段树扫描线&#xff08;基本原理&#xff09; 扫描线 第二个文章里面的图很生动&#xff1a; 我总结一下就是&#xff1a;将所给图形的横坐标全部记录&#xff0c;纵坐标记录为扫描线 然后对与…

梁迪:我为MVP骄傲,《微软最有价值专家奖励计划介绍》附专题视频

题记&#xff1a;有些事情&#xff0c;比 MVP 更加不朽&#xff0c;浩气长空&#xff0c;日月星汉&#xff0c;我们为 MVP 和那些心目中的“MVP”感到骄傲。微软 MVP 是一种追求&#xff0c;不必要去强求&#xff0c;但 MVP 必定是俱乐部发展的根基础。火车跑得快全凭车头带&am…

P3295 [SCOI2016]萌萌哒(DP+倍增)

P3295 [SCOI2016]萌萌哒 description solution 强制部分区间相同&#xff0c;很容易就想到了并查集&#xff0c;直接暴力并查集合并是O(n2)O(n^2)O(n2)的 只需要考虑那一个数据结构将其转化成O(nlog⁡n)O(n\log n)O(nlogn)的 树之类的就不考虑了&#xff0c;一段一段的区间…

【恭贺新春】2019年春节放假

2019年放假通知致全体微友&#xff1a; 2019年2月5日&#xff08;正月初一&#xff09;至2月8日&#xff08;正月初四&#xff09;春节放假&#xff0c;共4天&#xff0c;小编停止更新公众号信息。敬请相互转告。值此新春佳节到来之际&#xff0c;“dotNet跨平台”给大家拜个…

C - Insertion Sort Gym - 101955C

C - Insertion Sort Gym - 101955C 题意&#xff1a; t组数据&#xff0c;每组数据给你n&#xff0c;k&#xff0c;q&#xff0c;让你求存在多少合法的1~n排列 合法要求&#xff1a; 对排列的前k项进行排序&#xff0c;使得整个序列中最长的递增子序列长度为n-1 题解&#x…

华为云.NET Core支持情况调查

各大公有云都提供了开发者开发的SDK&#xff0c;今天我们来看看华为云对.NET Core的支持情况怎么样&#xff1f; .NET SDK地址 https://developer.huaweicloud.com/sdk#.NET华为云的.NET SDK相比其他语言少的可伶&#xff0c;而且这几个SDK还不支持.NET Core。SDK的支持实在太差…

[2021-07-19 内测NOIP] 操作(状压DP),异或(字典树),等级(线段树),矩阵(DP)

[2021-07-19 内测] NOIP操作descriptionsolutioncode异或descriptionsolutioncode等级descriptionsolutioncode矩阵descriptionsolutioncode操作 description 有n堆石子&#xff0c;每堆石子都有一定的数量&#xff0c;第i堆石子的数量用Ai表示。 任意两堆石子均可合并&…

.NET和Java之争

这几天连续有多篇文章诋毁.NET&#xff0c;这类文章我十几年前就看得多了&#xff0c;只不过十几年前是C和C之争&#xff0c;C和Java之争。我从来不理这类文章&#xff0c;因为这类口水战并没有什么实际意义。然而接连收到多位粉丝私聊说&#xff0c;主席&#xff0c;你应该写点…

线性代数一之矩阵转向量随机化求解——神奇的矩阵(BZOJ)+向量内积

向量随机化神奇的矩阵descriptionsolutioncode[NOI2013]向量内积descriptionsolutioncode矩阵既可以看成是一张数位表&#xff0c;也可以看成是若干个行向量或者若干个列向量的向量表神奇的矩阵 description solution 暴力做A∗BA*BA∗B会达到n3n^3n3的复杂度&#xff0c;难…

潘淳:国士无双《微软技术俱乐部(苏州)成立大会暨微软技术交流会介绍》附专题视频...

题记&#xff1a;凡我赶不上的&#xff0c;我就在未来等他&#xff0c;随时等待捕捉那个趋势的的到来。2019年立一个FLAG&#xff0c;加入一个成长性组织&#xff0c;一个能让我学习使我成长的平台。2019年你和我都将亲历这个组织的到来&#xff0c;一个属于苏州程序员自己的大…

ASP.NET Core中借助CSRedis实现安全高效的分布式锁

引言最近回头看了看开发的.NET Core 2.1项目的复盘总结&#xff0c;其中在多处用到Redis实现的分布式锁&#xff0c;虽然在OnResultExecuting方法中做了防止死锁的处理&#xff0c;但在某些场景下还是会发生死锁的问题&#xff0c;下面我只展示部分代码&#xff1a;问题&#x…

L Machining Disc Rotors

L Machining Disc Rotors 题意&#xff1a; 圆心为(0,0)半径为R的圆&#xff0c;现在被被n个互不相交的圆切割(圆心和半径会给出)&#xff0c;保证这n个彼此之间不会交叉&#xff0c;保证n个圆中不会有某个包含整个大圆的情况。问切割后大圆剩余部分的直径&#xff08;即两点…

线性代数二之矩阵加速DP——数学作业,Arc of Dream

矩阵加速数学作业descriptionsolutioncodeArc of Dreamdescriptionsolutioncode数学作业 description solution dpdpdp状态转移方程&#xff0c;dpidpi−1∗10lenii(modM)dp_{i}dp_{i-1}*10^{len_i}i\pmod Mdpi​dpi−1​∗10leni​i(modM) nnn巨大&#xff0c;分段矩阵加速 …

Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】

接着上一篇Shadow Properties之美&#xff08;一&#xff09;&#xff0c;我们来继续举一个有点啰嗦的栗子。先看简单需求&#xff1a;某HR系统&#xff0c;需要记录员工资料。需要记录的资料有&#xff1a;员工号&#xff08;规则&#xff1a;分公司所在城市拼音首字母&#x…