您当前的位置: 首页 >  网络

HeartFireY

暂无认证

  • 0浏览

    0关注

    334博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

2021CCPC网络赛(重赛) 1011.Jumping monkey

HeartFireY 发布时间:2021-10-11 23:56:42 ,浏览量:0

题目大意:给定一棵树,要求你求出对于每个节点,一只猴子从该节点开始跳,每次只能跳向到目标点最短路上权值最大的点为目标点的点,这样的点对于每个节点有多少个。

思路:考虑每个节点对其都无贡献的点,应该是所有点中权值最大的点,从该点出发无法跳向任何其他点。去除该点后,原来次大的节点同样无法向除去已去除点外的别的点跳。反复的执行这个过程,直至所有节点均被删去。但实际上这不好操作,因此我们考虑这个过程的逆过程:

首先将各个节点按照权值大小排序,从权值最小的节点开始遍历,每次将该节点作为上个节点以及已遍历过的邻接节点的父节点,这样便可以得到一棵新树,不难发现对于每个节点而言,其在新树上的深度即为所求答案(设根节点深度为 0 0 0)。

#include 
using namespace std;

const int N = 1e5 + 10;
vector g[N], ng[N];
int f[N], ans[N], rk[N];

struct node{
    int ser, val;
    const bool operator            
关注
打赏
1662600635
查看更多评论
0.0403s