D - Kay and Snowflake

思路:

树的重心

利用重心的一个推论,树的重心必定在子树重心的连线上。

然后利用重心的性质,可知,如果有一颗子树的大小超过整棵树的大小的1/2,那么树的重心一定在这颗子树上。

利用以上两条,可知:

如果没有一颗子树的大小超过整棵树的大小的1/2,那么就可以以根节点为树的重心,

不然就从 超过1/2大小的子树 的重心 到 根节点 之间找整棵树的重心。

因为不会找重复的点,所以退化的复杂度为O(n)

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define LL long long
#define pb push_back
#define pii pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a)) const int N = 3e5 + ;
vector<int>g[N];
int tot[N], ans[N], fa[N];
void dfs(int u) {
tot[u] = ;
for (int i = ; i < g[u].size(); i++) {
dfs(g[u][i]);
tot[u] += tot[g[u][i]];
}
ans[u] = u;
for (int i = ; i < g[u].size(); i++) {
if(tot[g[u][i]] * > tot[u]) ans[u] = ans[g[u][i]];
}
while((tot[u] - tot[ans[u]]) * > tot[u]) ans[u] = fa[ans[u]];
}
int main() {
int n, u, q;
scanf("%d%d", &n, &q);
for (int i = ; i <= n; i++) {
scanf("%d", &fa[i]);
g[fa[i]].pb(i);
}
dfs();
while (q--) {
scanf("%d", &u);
printf("%d\n",ans[u]);
}
return ;
}

Codeforces 686 D - Kay and Snowflake的更多相关文章

  1. codeforces 686D D. Kay and Snowflake(dfs)

    题目链接: D. Kay and Snowflake time limit per test 3 seconds memory limit per test 256 megabytes input s ...

  2. Codeforces Round #359 (Div. 1) B. Kay and Snowflake dfs

    B. Kay and Snowflake 题目连接: http://www.codeforces.com/contest/685/problem/B Description After the pie ...

  3. Kay and Snowflake CodeForces - 686D

    Kay and Snowflake CodeForces - 686D 题意:给一棵有根树,有很多查询(100000级别的),查询是求以任意一点为根的子树的任意重心. 方法很多,但是我一个都不会 重心 ...

  4. Codeforces Round #359 (Div. 2) D. Kay and Snowflake 树DP

    D. Kay and Snowflake     After the piece of a devilish mirror hit the Kay's eye, he is no longer int ...

  5. Codeforces Round #359 (Div. 2) D. Kay and Snowflake 树的重心

    题目链接: 题目 D. Kay and Snowflake time limit per test 3 seconds memory limit per test 256 megabytes inpu ...

  6. Codeforces Round #359 (Div. 2) D - Kay and Snowflake

    D - Kay and Snowflake 题目大意:给你一棵数q个询问,每个询问给你一个顶点编号,要你求以这个点为根的子树的重心是哪个节点. 定义:一棵树的顶点数为n,将重心去掉了以后所有子树的顶点 ...

  7. CF685B Kay and Snowflake 贪心

    CF685B Kay and Snowflake 链接 CF 题目大意 给你一颗树,询问子树的重心 思路 贪心? 重心肯定是向上走的,所以直接向上跳就好了. 不优秀的时候就不要跳了 ,因为以后也不能更 ...

  8. B. Kay and Snowflake 解析(思維、DFS、DP、重心)

    Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...

  9. Kay and Snowflake CodeForces - 686D (树的重心性质)

    After the piece of a devilish mirror hit the Kay's eye, he is no longer interested in the beauty of ...

随机推荐

  1. Python2的一些问题及解决办法

    1. 无法注释中文的解决办法 # -*- coding:utf8 -*- # 添加这一行就行了 from django.contrib import admin from myapp.models i ...

  2. Vue基础进阶 之 Vue生命周期与钩子函数

    Vue生命周期 Vue生命周期:Vue实例从创建到销毁的过程,称为Vue的生命周期: Vue生命周期示意图:https://cn.vuejs.org/v2/guide/instance.html#生命 ...

  3. oracle /*+ SYS_DL_CURSOR */ 这个hint

    之前一直都没使用过 /*+ SYS_DL_CURSOR */这个提示,今天下午在排查一个性能问题的时候,发现出问题的session在执行一个带了SYS_DL_CURSOR提示的语句,类似于: 经查这个 ...

  4. jar中META-INF

    一直记得META-INF中只有在直接启动jar可执行文件时需要在manifest中配置启动类,最近看dubbo的配置,发现dubbo的配置都丢在META-INF下,特地搜索了下,官网对于META-IN ...

  5. Qone 自动删除说说脚本

    请看图 script var delay = 1000; function del() { document.querySelector('.app_canvas_frame').contentDoc ...

  6. tf.nn.relu

    tf.nn.relu(features, name = None) 这个函数的作用是计算激活函数 relu,即 max(features, 0).即将矩阵中每行的非最大值置0. import tens ...

  7. ERROR: please install the following Perl modules before executing ./mysql_install_db

    centos7.5 安装mysql数据库报错 问题: [root@db02-52 scripts]# ./mysql_install_db --user=mysql --basedir=/applic ...

  8. Eclipse中在xml文件中,ctrl+左键的快捷键,点击class定位,不生效

    修改方式:   第一种方式:Window -> Preferences -> General -> Editors -> File Associations           ...

  9. 【bzoj1706】[usaco2007 Nov]relays 奶牛接力跑

    题意 给出一张无向图,求出恰巧经过n条边的最短路. 题解 考虑先离散化,那么点的个数只会有202个最多.于是复杂度里面就可以有一个\(n^3\).考虑构造矩阵\(d^1\)表示经过一条边的最短路,那么 ...

  10. Git-Flow | How it’s used and why you should

    Git-Flow | How it’s used and why you should What is Git-Flow about? Git-Flow is a workflow for using ...