Jumping Monkey ccpc网络赛重赛

2024CCPC郑州邀请赛暨河南省赛(A,B,C,D,F,G,H,J,K,L,M) 阅读详情

问题分析:

  • 我们先正向看这个问题。

  • 当前树里点权最大的节点对于其他节点来说肯定是都能到的,然后我们统计一下有哪些点,再删掉这个点权最大的点即可,递归就能得到答案。

  • 但是那样写可能比较复杂。

  • 所以采用了反向的做法。

  • 首先,我们把点权从小到大排序好,然后每一次都把当前点u变为与u相连的(已经枚举过的点)的根节点,从而构成一棵新树。最后节点的深度就是其答案。

  • 我们考虑第二个样例。请添加图片描述

  • 我们可以用并查集维护父节点,从样例二可以看到我们加节点2的时候是加在之前与他相连的节点1在新树的父节点,节点5是直接连上节点2(因为它本来就和节点2相连)。

  • 我们用vector来储存每一个节点相连的边。

  • 最后dfs得到答案。

代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int fa[maxn];
pair<int, int> a[maxn];
vector<int> e[maxn];   //原树
vector<int> ans[maxn]; //新树
int depth[maxn];       //答案
int vis[maxn];
void dfs(int u)
{
        for (int j = 0; j < ans[u].size(); j++)
        {
                depth[ans[u][j]] = 1 + depth[u];
                dfs(ans[u][j]);
        }
        //求深度
}
int find(int x)
{
        while (x != fa[x])
                x = fa[x] = fa[fa[x]];
        return x;
}
int main()
{
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        int t;
        cin >> t;
        while (t--)
        {
                int n;
                cin >> n;
                for (int i = 1; i <= n; i++)
                {
                        vis[i] = 0;
                        fa[i] = i;
                        e[i].clear();
                        ans[i].clear();
                }
                memset(a, 0, sizeof(a));
                for (int i = 1; i <= n - 1; i++)
                {
                        int u, v;
                        cin >> u >> v;
                        e[u].push_back(v);
                        e[v].push_back(u);
                        //储存旧树
                }
                for (int i = 1; i <= n; i++)
                {
                        cin >> a[i].first;
                        a[i].second = i;
                }
                sort(a + 1, a + 1 + n);
                vis[a[1].second] = 1;
                //代表是否已经加入到新树里面
                for (int i = 2; i <= n; ++i)
                {
                        int u = a[i].second;
                        for (auto &j : e[u])
                        {
                                if (!vis[j])
                                        continue;
                                int v = find(j);
                                fa[v] = u;
                                ans[u].push_back(v);
                        }
                        vis[u] = 1;
                }
                depth[a[n].second] = 1;
                dfs(a[n].second);
                for (int i = 1; i <= n; i++)
                {
                        cout << depth[i] << endl;
                }
        }
        return 0;
}
蓝桥杯总结!绝对干货!! 阅读详情

相关推荐

光刷题不参加这些算法竞赛?太亏了!

你是爆零选手还是ak选手?

bigsai 1万+

2025年,ICPC比赛、CCPC比赛、CCF-CSP考试、蓝桥杯比赛、天梯赛日程

第49届(2024) ICPC EC Final 2024年12月14-15日 西北工业大学。(择日)日 9:00-13:00(软件类)/9:00-14:00(电子类)院校报名时间:2024年12月16日9:00—12月20日18:00。比赛日期:2025年4月19日 13:30-16:30。2025年4月12日 9:00-13:00(软件类)2025年4月13日 9:00-14:00(电子类)报名截止日期:2024 年 3月23日。第39次 2024年9月21日。第40次 2024年12月7日。

海岛Blog 4万+

20个闭环渗透测试项目:从漏洞发现到简历突围

渗透测试不仅是工具使用,更是对系统设计缺陷与实现偏差的深度推演。理解OWASP Top 10、Burp Suite等基础能力只是起点,真正具备工程价值的是能复现、可验证、可协作的完整攻击链。本文聚焦真实业务场景下的SSRF协议绕过、JWT签名机制缺陷、Redis未授权利用、Kong网关配置风险及etcd存储结构分析等核心热词,揭示漏洞本质在于架构决策与配置偏差的叠加态。适用于红队实战、甲方安全建设与乙方渗透审计等多类岗位,帮助从业者将技术动作升维为技术叙事。

weixin_32234493的博客 415

2022年,ICPC比赛、CCPC比赛、CCF-CSP考试、蓝桥杯比赛、天梯赛日程

**ICPC比赛日程(第47届,2022年):** 第一次网络选拔赛 2022年9月18日 第二次网络选拔赛 2022年9月25日 沈阳站 2022年11月5-6日 东北大学 西安站 2022年11月12-13日 西北工业大学

海岛Blog 5万+

从零构建PEMFC仿真模型:MATLAB/Simulink中的模块化拆解与系统集成

本文详细介绍了如何在MATLAB/Simulink环境中从零构建质子交换膜燃料电池(PEMFC)仿真模型,包括电化学模型、气体供应系统和热管理系统的模块化实现。通过多物理场耦合技巧和系统集成策略,帮助工程师和研究者高效开发PEMFC控制策略,优化性能并实现实时仿真。

weixin_29294975的博客 360

ArcGIS标注(二分式、三分式、条件分类标注、上下标、牵引线、文字格式化…)

ArcGIS中的各种标注方法、可能遇到的问题和细节。

m0_73306837的博客 5271

2024年,ICPC比赛、CCPC比赛、CCF-CSP考试、蓝桥杯比赛、天梯赛日程

第48届(2023) ICPC EC Final 2024年1月12-14日 上海大学。第九届CCSP全国总决赛 2024年10月?院校报名时间:2023年10月7日——2023年12月15日。秦皇岛分站赛 2024年?日 东北大学秦皇岛分校?女生专场 重庆 2024年?日 重庆对外经贸大学?高职专场 嘉兴 2024年?比赛日期:2024年4月?桂林分站赛 2024年?日 桂林电子科技大学?哈尔滨分站赛 2024年?陕西邀请赛 2024年?深圳分站赛 2024年?报名截止日期: 2024 年 3 月?

海岛Blog 5万+

AGX Orin 部署PyTorch与Torchvision 2026避坑指南

本文提供了2026年在AGX Orin开发板上部署PyTorch与Torchvision的详细避坑指南。针对ARM64架构和JetPack 6.2系统,重点解决了Python 3.10环境配置、官方wheel包安装、torchvision源码编译等关键步骤,并分享了常见问题解决方案和性能优化技巧,确保深度学习环境稳定运行。

sky77的博客 752

CCPC2021网络赛重赛 5、Jumping Monkey

CCPC2021网络赛重赛 5、Jumping Monkey 题意: nnn个点的树,每个点有一个不一样的点权,求从每个点出发能到达的点数(需满足终点为起点到终点路径上的最大点权才能到达)T<1e4,n<1e5,∑n<8e5。T < 1e4, n < 1e5, \sum{n} < 8e5。T<1e4,n<1e5,∑n<8e5。 思路: 可以考虑点权最大的那个结点xxx,显然其他所有点都能到达它,且到达它之后不能越过它到其他的点去。 所以节点xxx一

m0_58530187的博客 383

SAP ATP可用性检查简介

系统中建立此单时,SAP就会做一个所谓的检查,检查一下我们预先设定的考虑因素,能否满足客户的要求,什么时候可以满足,这就是可用性检查的功能。2、同样的在创建生产订单的时候也有ATP的检查,生产订单是100PC,要求2024-07-01生产完成,系统就会根据配置进行物料的可用性的检查,看物料是否能够满足生产同时能够满足交期。14: 表示相关预留的选项,与10的区别在于,10是一般是表示我们用MB21建立的,而14是表示由于相关预留,即此预留是来自于其他物料,如生产订单所产生的预留。

我小时候很黑的博客 3377

OpenClaw 与十几款国产 “龙虾” 智能体深度对比

详解介绍OpenClaw和各种类似国产“龙虾”智能体工具深度对比

program哲学 2349

[并查集][思维]2021ccpc网络赛重赛Jumping Monkey

Problem Description There is a tree withnnodes andn−1edges that make all nodes connected. Each nodeihas adistinctweightai. A monkey is jumping on the tree. In one jump, the monkey can jump from nodeuto nodevif and only ifavis the greatest o...

Cloth的博客 276

如何使用 Conda 安装 Qiskit(详细教程)

本文介绍了使用conda安装Qiskit量子计算工具包的完整流程。首先创建Python 3.10的conda虚拟环境(qiskit_env),然后安装Qiskit核心包及可视化组件(注意Mac用户的安装命令差异)。接着注册IPython内核并测试环境,通过量子电路创建与可视化演示验证安装成功。该教程为量子计算开发提供了简洁的环境配置指南,适合研究者和开发者快速搭建Qiskit开发环境。

猿小白的博客 565

Jumping Monkey(CCPC网络赛重赛)

Jumping Monkey(CCPC网络赛重赛) 题意: n个点的树,每个点有一个不同的值aia_iai​.现在一个猴子在树上,这个猴子从点u跳到点v当且仅当ava_vav​是u到v最短路径上的最大值。如果没有点能跳将停止。 对于k∈[1,n],计算猴子在点k开始最多能跳的点数量 题解: 每次跳跃点u,u要是路径上的最大值。如果点权最大的那个节点(设为u),显然无论从哪里开始跳,都可以直接到达u,且无法越过u到达其他点,到达u后也不能再跳向其他结点。也就是说u是最优方案中最后一个到达的点。那u的位置已经被

qq_35975367的博客 494

提交 ieee 手稿出现:Do not include the Reviewer PDF with my submission 怎么办

IEEE投稿Reviewer PDF选项说明 投稿时出现的"Do not include the Reviewer PDF with my submission"选项控制是否附带评审专用PDF文件。Reviewer PDF是系统自动生成包含所有投稿材料的完整PDF,用于同行评审。建议保持默认不勾选状态,除非确认编辑部不需要该文件,否则可能影响审稿流程。勾选表示不附带此PDF,不勾选则会正常生成并提交该评审文件。

ZhangJiqun&191cm&85kg 2212

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

2021 CCPC 网络赛重赛 Jumping Monkey(并查集重构树,dfs)

题目链接 题意 给出一个nnn个结点的树,每个节点有一个权值aia_iai​。现在有一个猴子,他可以从iii结点跳到jjj结点的要求是:在iii->jjj的最短路径上jjj的权值是最大的。现在询问k⊆(1,n)k \subseteq (1, n)k⊆(1,n)时,猴子能跳到的最多结点数量。 Sol Code #include<bits/stdc++.h> #define int long long #define endl '\n' using namespace std; typ

killer的博客 543

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

2021ccpc网络赛重赛1011 - Jumping Monkey(并查集 + 树的深度)(nb题)

Problem Description There is a tree with n nodes and n−1 edges that make all nodes connected. Each node i has a distinct weight ai. A monkey is jumping on the tree. In one jump, the monkey can jump from node u to node v if and only if av is the greatest of

weixin_51979465的博客 529

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

2021CCPC网络赛重赛 _ 1011 _ HDU7136 _ Jumping Monkey 并查集,重建树

原题链接 转载博客 写的很好了,这里只做记录:D 贴个代码 #include<bits/stdc++.h> #define LL long long #define INF INT64_MAX #define MOD 998244353 #define ls rt << 1 #define rs rt << 1 | 1 using namespace std; typedef pair<int,int>pa; const int N = 1e5+7; int

Mamba0Z的博客 206

2021CCPC网络赛(重赛)——1011.K.Jumping Monkey

并查集 + 树形结构(逆向建树) 920ms #include<bits/stdc++.h> #define ll long long #define fir first #define sec second #define PB push_back #define ALL(a) begin(a),end(a) #define mem(a,n) memset(a,n,sizeof(a)) #define IOS ios::sync_with_stdio(false);cin.tie(0);cou

自伤无色的博客 315

2021ccpc网络赛

Jumping Monkey 并查集 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+5; //string p1="imposter",p2="crewmate"; int t,n,dep[maxn],vis[maxn],fa[maxn]; vector<int>mp[maxn],mp2[maxn]; struct node{ int w,id; bool operator < (const

weixin_45722843的博客 248

2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛(重赛)1011 Jumping Monkey

1011 Jumping Monkey 思路: 首先看当前图中剩下的权值最大的点u,要使得答案最优从任何一个节点开始跳,跳到最后肯定会跳到u。那么考虑把v从图中去掉,图会变成若干个连通块,这些连通块自己内部求最优解再加上跳到权值最大的点u就是正解。按照这个思路,每趟将所有连通块中权值最大的点拿出来,对于节点v,如果该节点再第k趟被拿出来,那么节点v的解为k。 这里我们反向进行如上过程,对于最后一趟拿出来的点一定是每个连通块中最小的节点,我们按照权值从小到大遍历每个节点v,并将已经遍历过的并且和v联通的节点标

weixin_45800628的博客 1266

2021 ccpc 网络赛重赛

Monopoly 思维、二分 大意:有个长度为 n的序列 组成的环,序列有正有负,当走到位置 i 时,得分加上aia_iai​ ,m次询问,每次输入有个得分 x ,问最少进行多少步得 x 分,若不能输出-1。 思路:记走一圈的得分为 s, 前缀得分preipre_iprei​ 对于 x ,若能获得得分 x,那么显然 x可以表示成 x=k∗s+preix=k*s+pre_ix=k∗s+prei​ ,对于此类式子往往和取模相联系,等式两边%s ,x%s=preipre_iprei​%s(注意当s=0时,是没.

m0_51488693的博客 283

【大一大二必看】计算机专业的同学应该参加哪些比赛?

大学生计算机专业值得推荐参加的比赛

Edison's 小宇宙 3万+

2024年CCPC网络赛C题题解 —— 种树(gym105336C)

题意:给你一个有0有1的数,每次可以把一个大小为3(包含3个结点)的结构中,要求至少包含一个1,然后就能把整个块的结点都变成1,问你最少需要这样几次操作能使所有节点都变成1。然后赛时其实我没做出来,树形dp这个做法是想到的,但是被J这个线性基卡住了(本人当时没接触过线性基),然后一些题目没有去写。

Zz_0913的博客 1486

计算机类竞赛经验分享

有哪些计算机类竞赛 程序设计类竞赛(算法类竞赛) 项目应用类竞赛 数学建模类竞赛 程序设计类竞赛(算法类竞赛) 这类竞赛主要是使用各类算法,在规定的实际内(多为3~5小时)解出数道题目(多为4~8道),且使用的算法有时间长度限制,否则会超时,这类竞赛主要有: ACM-ICPC国际大学生程序设计竞赛 CCPC中国大学生程序设计竞赛 CCF CCSP大学生计算机系统与程序设计竞赛 团体程序设计天梯赛 蓝桥杯大赛 CCF CSP计算机软件能力认证 前四项比赛难度较高且有报名资格限制,多为学院ACM集训队的

Forest 4040
上一篇: 糖果机小作业
下一篇: AtCoder Beginner Contest 223
csu-yuuki
博客等级 码龄6年 133粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值