news 2026/4/25 2:48:40

打卡信奥刷题(3160)用C++实现信奥题 P7807 魔力滋生

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(3160)用C++实现信奥题 P7807 魔力滋生

P7807 魔力滋生

题目背景

Source:八仙敬酒,这是可以点的。

  • 吕洞宾——醉酒提壶力千钧;
  • 铁拐李——旋肘膝撞醉还真;
  • 汉钟离——跌步抱坛兜心顶;
  • 蓝采和——单提敬酒拦腰破
  • 张果老——醉酒抛杯踢连环;
  • 曹国舅——仙人敬酒锁喉扣;
  • 韩湘子——擒腕击胸醉吹箫;
  • 何仙姑——弹腰献酒醉荡步。

题目描述

现有一个n nn个点的树T TT,满足任意一个结点的所连接的结点个数不超过2 22

现在依次对结点u = 1 ∼ n u=1\sim nu=1n进行操作:

  • 随机一个整数x ( ≥ k ) x(\ge k)x(k)
  • 新建x xx个结点,每个结点与u uu之间连一条边。

显然操作完成后仍是一棵树T ′ T'T,其结点数为m = n + ∑ x m=n+\sum xm=n+x

已知操作后的树T ′ T'T及其结点数m mm,请还原原树T TT,若有多种方案,输出任意一组使得n \color{black}nn最大的。

值得注意的是,我们进行还原和输出时,只关心树的形状,而不关心结点的相对编号。

输入格式

第一行输入两个正整数m , k m,km,k,表示树T ′ T'T的结点数、随机数x xx的下限。

2 ∼ m 2\sim m2m行,每行输入两个正整数u , v u,vu,v,表示树T ′ T'T中的一条边。

输出格式

第一行输出一个正整数n nn,表示构造出树T TT的结点数。

2 ∼ n 2\sim n2n行,每行输出两个正整数u , v u,vu,v,表示树T TT中的一条边。

输出的u , v u,vu,v必须满足:1 ≤ u , v ≤ n 1\le u,v\le n1u,vn

输入输出样例 #1

输入 #1

5 1 1 2 1 3 1 4 1 5

输出 #1

1

输入输出样例 #2

输入 #2

7 0 1 2 1 3 1 4 1 5 1 6 1 7

输出 #2

3 1 2 1 3

输入输出样例 #3

输入 #3

9 1 1 2 2 3 1 4 1 5 2 6 2 7 3 8 3 9

输出 #3

3 1 2 2 3

说明/提示

样例说明

样例# 1 \#1#1中,只有结点1 11可能在树T TT中:它对应的x xx4 44

样例# 2 \#2#2中,结点1 , 2 , 3 1,2,31,2,3在树T TT中:结点1 11对应的x xx4 44,结点2 , 3 2,32,3对应的x xx0 00

样例# 3 \#3#3中,结点1 , 2 , 3 1,2,31,2,3在树T TT中:它们随机的x xx均为2 22

样例# 3 \#3#3给出一张示意图,图中红色结点表示树T TT中的结点,图中所有结点都在树T ′ T'T上。

数据范围
SubtaskScorex = x=x=
1 1130 30300 00
2 2230 30301 11
3 3340 4040
4 440 00Hack

说明:Subtask4 为不计分 Hack 数据,只有通过全部的 Subtask1 ∼ 4 1\sim414才算 AC。

对于100 % 100\%100%的数据:1 ≤ m ≤ 10 5 , k ∈ [ 0 , m ) 1\le m\le10^5,k\in[0,m)1m105,k[0,m),数据输入保证有解。


后记

极光魔花好可爱∼ \sim

C++实现

#include<iostream>#include<algorithm>usingnamespacestd;constintN=1e5+10;structnode{intto,nxt,w;}e[N*2];inthead[N*2],tot;intans;intn,k;intf[N*2];voidadd(inta,intb,intc){e[++tot].to=b;e[tot].nxt=head[a];e[tot].w=c;head[a]=tot;}voiddfs(intu,intfa){for(inti=head[u];i;i=e[i].nxt){intv=e[i].to;intw=e[i].w;if(v==fa)continue;dfs(v,u);ans=max(ans,f[u]+f[v]+w);f[u]=max(f[u],f[v]+w);}}//求直径有两种方法,一种是这个dp,另外一个是两遍dfs,有兴趣的同学可以去找来看看。intmain(){cin>>n>>k;inta,b;for(inti=1;i<n;i++){scanf("%d%d",&a,&b);add(a,b,1);add(b,a,1);}dfs(1,-1);intcnt=ans+1;if(k==0){cout<<cnt<<endl;for(inti=1;i<cnt;i++){cout<<i<<" "<<i+1<<endl;}}else{cout<<max(1,cnt-2)<<endl;//有一点的坑的地方,当cnt-2小于等于零的情况是不存在的,所以要和1取最大值。for(inti=1;i<max(1,cnt-2);i++){cout<<i<<" "<<i+1<<endl;}}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 2:48:39

智能编码助手架构解析:从系统提示词到多智能体协同设计

1. 项目概述&#xff1a;解码智能编码助手的内部架构最近在GitHub上看到一个挺有意思的开源研究项目&#xff0c;叫“Leonxlnx/agentic-ai-prompt-research”。这个项目没有一行运行代码&#xff0c;却试图做一件相当有挑战性的事&#xff1a;通过行为观察和逆向工程&#xff0…

作者头像 李华
网站建设 2026/4/25 2:48:17

2026年,这家空调服务商凭啥脱颖而出,成为众多用户心中的好用之选?

在竞争激烈的空调服务市场中&#xff0c;安徽八二一制冷设备有限公司&#xff08;以下简称“八二一制冷”&#xff09;在2026年成功脱颖而出&#xff0c;成为众多用户心中的好用之选。下面我们从几个关键方面来分析它的优势。一、丰富的产品线与优质产品供应八二一制冷拥有极为…

作者头像 李华
网站建设 2026/4/25 2:48:14

5 分钟搞定用户系统?uni-id 统一用户中心,登录/权限/角色全拿下

引言 从零开始搭建一套完整的用户系统&#xff0c;包含注册、登录、权限管理、角色控制&#xff0c;再集成微信/QQ/苹果等第三方登录&#xff0c;对于一个全栈开发者来说&#xff0c;至少需要数天时间。如果还要考虑安全性、Token 管理、RBAC 权限模型&#xff0c;工作量更是翻…

作者头像 李华