蓝桥杯C/C++百校真题赛(1期)Day4题解(左孩子右兄弟、作物杂交)

news/2024/10/29 4:21:18/

Q1 左孩子右兄弟

在这里插入图片描述

f[u]表示以u为根转化而成的二叉树(以下简称二叉树)的最大高度f[u]=max(f[ji])+cnt[u]−1+1,ji是u的所有儿子,cnt[u]表示原树中u的儿子个数。因为以u为根的二叉树肯定由u的一个儿子为根的二叉树构成来作为他的左半部假设f[jt]是最大的那个,那么u除去t的所有儿子应该可以被加到t为根的子树中作为兄弟,因为t为根的已经是二叉树,补充兄弟后一定是变高。f[u] 表示以u为根转化而成的二叉树(以下简称二叉树)的最大高度\\ f[u] = max(f[j_i]) + cnt[u] - 1 + 1, j_i是u\\的所有儿子,cnt[u]表示原树中u的儿子个数。因为\\ 以u为根的二叉树肯定由u的一个儿子为根 的二叉树构成来作为他的左半部\\ 假设f[j_t]是最大的那个,那么u除去t的所有儿子应该可以被加到t为根的子\\ 树中作为兄弟,因为t为根的已经是二叉树,补充兄弟后一定是变高。\\ f[u]表示以u为根转化而成的二叉树(以下简称二叉树)的最大高度f[u]=max(f[ji])+cnt[u]1+1,jiu的所有儿子,cnt[u]表示原树中u的儿子个数。因为u为根的二叉树肯定由u的一个儿子为根的二叉树构成来作为他的左半部假设f[jt]是最大的那个,那么u除去t的所有儿子应该可以被加到t为根的子树中作为兄弟,因为t为根的已经是二叉树,补充兄弟后一定是变高。

/*
* @Author: gorsonpy
* @Date:   2022-12-19 10:36:45
* @Last Modified by:   gorsonpy
* @Last Modified time: 2022-12-19 10:45:57
*/
#include <iostream>
#include<cstring>
using namespace std;const int N = 1e5 + 10;
int e[N], ne[N], h[N], idx;
int cnt[N], f[N];void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}void dfs(int u, int fa) //计算以u为根的多叉树转化成二叉树后的最大高度
{for(int i = h[u]; ~i; i = ne[i]){int j = e[i];if(j == fa) continue;dfs(j, u);f[u] = max(f[u], f[j] + cnt[u]);} 
}
int main()
{memset(h, -1, sizeof h);int n;cin >> n;for(int i = 0; i < n - 1; ++i){int x;cin >> x;add(x, i + 2);cnt[x] ++;}dfs(1, 0);cout << f[1] << endl;return 0;
}

Q2 作物杂交

在这里插入图片描述
在这里插入图片描述

正解应该是Spfa/BellmanFord(虽然官方给的tag是搜索?),题目不保证输入不会有A+B能杂交出多个种类的情况,也不保证某个种类只能由一种组合杂交而来,也不保证不会有相同输入。搜索可能成环。

把种类抽象为图的点,每个合成方式理解为一条边,对于A+B可以合成C,我们建立两条边,一个是A到C,边权为B,一个是B到C,边权为A。利用spfa的拓扑性质,判断每次合成一个种类时,他的子类是否已经得到过。最后的ans=f[t],t为所求终点品类。把种类抽象为图的点,每个合成方式理解为一条边,对于A+B可以合成\\ C,我们建立两条边,一个是A到C,边权为B,一个是B到C,边权为A。\\ 利用spfa的拓扑性质,判断每次合成一个种类时,他的子类是否已经得到\\过。 最后的ans = f[t],t为所求终点品类。把种类抽象为图的点,每个合成方式理解为一条边,对于A+B可以合成C,我们建立两条边,一个是AC,边权为B,一个是BC,边权为A利用spfa的拓扑性质,判断每次合成一个种类时,他的子类是否已经得到过。最后的ans=f[t],t为所求终点品类。

#include<iostream>
#include<queue>
#include<cstring>using namespace std;
const int N = 1e5 + 10;int d[N], h[N], e[2 * N], ne[2 * N], w[2 * N], idx;
int n, m, k, t;
int tim[N];
bool st[N], hav[N];void add(int a, int b, int c) // a, b可以合成c
{e[idx] = c, ne[idx] = h[a], w[idx] = b, h[a] = idx++;
}int spfa()
{memset(d, 0x3f, sizeof d);queue<int> q;for(int i = 1; i <= n; ++i){if(hav[i]){q.push(i);st[i] = true;d[i] = 0;}}while(q.size()){int x = q.front();q.pop();st[x] = false;for(int i = h[x]; ~i; i = ne[i]){int z = e[i], y = w[i];if(hav[x] && hav[y]){hav[z] = true;int cost = max(d[x], d[y]) + max(tim[x], tim[y]);if(d[z] > cost){d[z] = cost;if(!st[z]){q.push(z);st[z] = true;}}}}}return d[t];
}
int main()
{memset(h, -1, sizeof h);cin >> n >> m >> k >> t;for(int i = 1; i <= n; ++i) cin >> tim[i];for(int i = 1; i <= m; ++i){int x;cin >> x;hav[x] = true;}for(int i = 1; i <= k; ++i){int a, b, c;cin >> a >> b >> c;add(a, b, c);add(b, a, c);}cout << spfa() << endl;return 0;
}

http://www.ppmy.cn/news/4791.html

相关文章

C++基础知识 const

#include <iostream> using namespace std; void main() { char *str1 {"Hello"}; char *str2 {"Hello World"}; char str3[] "Hello"; //const char * ptr1 str1; // 常量指针 (指向常量的指针)-- 指向字符串常量&#xf…

【图像配准】SIFT图像配准【含Matlab源码 1007期】

⛄一、SIFT配准简介 SIFT即尺度不变特征变换&#xff0c;是用于图像处理领域的一种描述。这种描述具有尺度不变性&#xff0c;可在图像中检测出关键点&#xff0c;是一种局部特征描述子。 1 SIFT算法特点&#xff1a; &#xff08;1&#xff09;具有较好的稳定性和不变性&…

[附源码]Python计算机毕业设计Django演唱会门票售卖系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

全球石油行业资源储量丰富 但分布不均 供需量逐渐恢复增长

1、全球石油资源储量情况 &#xff08;1&#xff09;全球石油资源丰富&#xff0c;但分布不均匀 根据观研报告网发布的《2022年中国石油行业分析报告-行业全景评估与投资规划分析》显示&#xff0c;全球石油资源总量丰富&#xff0c;勘探开发潜力较大。根据数据显示&#xff0…

那年夏天。

今天是2022.12.19&#xff0c;并不是什么特殊的日子&#xff0c;今年就不做年终总结了&#xff0c;今天想写一篇对那个男孩&#xff08;前任&#xff09;&#xff0c;我就叫他明夏吧&#xff08;实际真名不是&#xff09;的感悟。 故事要从13年说起&#xff0c;那时我十六岁&am…

【细胞分割】中值滤波+分水岭法细胞计数【含Matlab源码 640期】

⛄一、图像分割简介 理论知识参考&#xff1a;【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】 ⛄二、部分源代码 clear; close all; %------------------ %程序中定义图像变量说明 %Image->原图变量; %Image_BW->二值化图象; %Image_BW_medfilt->中…

2022 软件测试填空判断题【太原理工大学】

期末复习汇总&#xff0c;点这里&#xff01;https://blog.csdn.net/m0_52861684/category_12095266.html?spm1001.2014.3001.5482 目录 二、填空题 三、判断题 二、填空题 全是课本原话&#xff0c;不一定只填红色部分&#xff0c;可能下次就换了这句话的其它地方&#xff…

车联网典型应用场景业务建模及仿真方法

【摘 要】基于5G网络的车联网技术是当前移动通信领域的研究热点之一。车联网应用场景对无线网络在带宽、时延和可靠性方面提出了更高的要求,以车联网典型应用场景远程遥控驾驶为例,根据场景需求给出了相应的业务模型、信道模型和评估指标,并提出了该场景下用于关键技术评估…