ccf认证 202312-3

小 C 观察了事先收集到的数据,并加以统计,得到了一个名词属于各个类别的可能性大小的信息。具体而言,每个类别都可以赋予一个被称为权重的值,值越大,说明一个名词属于该类别的可能性越大。由于每次向用户的询问可以获得两种回答,小 C 联想到了二分策略。他设计的策略如下:

  1. 对于每一个类别,统计它和其全部后代类别的权重之和,同时统计其余全部类别的权重之和,并求二者差值的绝对值,计为 𝑤𝛿;
  2. 选择 𝑤𝛿 最小的类别,如果有多个,则选取编号最小的那一个,向用户询问名词是否属于该类别;
  3. 如果用户回答“是”,则仅保留该类别及其后代类别,否则仅保留其余类别;
  4. 重复步骤 1,直到只剩下一个类别,此时即可确定名词的类别。

小 C 请你帮忙编写一个程序,来测试这个策略的有效性。你的程序首先读取到所有的类别及其上级次级关系,以及每个类别的权重。你的程序需要测试对于被归类到给定类别的名词,按照上述策略提问,向用户提出的所有问题。

思路:树的删除操作,暴力能过。

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<int>t[2010];
int a[2010];
int w[2010];
int vis[2010];
int sum;
int n,m;
int dfs(int u){if(vis[u])return 0;w[u]=a[u];for(int i=0;i<t[u].size();i++)w[u]+=dfs(t[u][i]);return w[u];
}
int dfs1(int q,int x){if(vis[x])return 0;if(q==x)return 1;for(int i=0;i<t[x].size();i++)if(dfs1(q,t[x][i]))return 1;return 0;
}
void run(int q,int root){int cnt=0;int flag1;int sum=w[root];int flag2;for(int i=n;i>=1;i--)if(w[i]){cnt++;flag1=abs(2*w[i]-sum);flag2=i;}if(cnt==1)return ;for(int i=1;i<=n;i++)if(w[i]&&abs(2*w[i]-sum)<flag1){flag1=abs(2*w[i]-sum);flag2=i;}cout<<flag2<<' ';if(!dfs1(q,flag2)){vis[flag2]=1;memset(w,0,sizeof(w));w[root]=dfs(root);}else {root=flag2;memset(w,0,sizeof(w));w[flag2]=dfs(flag2);}run(q,root);
}
signed main(){cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i];for(int i=2;i<=n;i++){int b;cin>>b;t[b].push_back(i);}while(m--){int q;memset(vis,0,sizeof(vis));memset(w,0,sizeof(w));w[1]=dfs(1);cin>>q;run(q,1);cout<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣题解(摆动序列)

376. 摆动序列 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如&#xff0c; [1, 7, 4, 9, 2, 5] 是一个 …

TCP和IP数据包结构

一、问题引入 一般我们在谈上网速度的时候&#xff0c;专业上用带宽来描述&#xff0c;其实无论说网速或者带宽都是不准确的&#xff0c;呵呵。比如&#xff1a;1兆&#xff0c;512K……有些在学校的学生&#xff0c;也许会有疑问&#xff0c;明明我的业务是1M&#xff0c;为…

51单片机(STC8051U34K64)_RA8889_SPI4参考代码(v1.3)

硬件&#xff1a;STC8051U34K64 RA8889开发板&#xff08;硬件跳线变更为SPI-4模式&#xff0c;PS101&#xff0c;R143&#xff0c;R141短接&#xff0c;R142不接&#xff09; STC8051U34K64是STC最新推出来的单片机&#xff0c;主要用于替换传统的8051单片机&#xff0c;与标…

程序员学长 | 快速学习一个算法,GAN

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;快速学习一个算法&#xff0c;GAN GAN 如何工作&#xff1f; GAN 由两个部分组成&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&…

day11:01文件处理

一、文件与文件模式介绍 1、什么是文件 文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口 用户/应用程序(open()) 操作系统&#xff08;文件&#xff09; 计算机硬件&#xff08;硬盘&#xff09;2、为何要用文件 ①用户/应用程序可以通过文件将数据永久保存…

使用Apache Beam进行统一批处理与流处理

Apache Beam是一个开源的统一编程模型&#xff0c;用于定义和执行数据处理流水线&#xff0c;支持批处理和流处理。Beam旨在提供一个简单、可扩展且灵活的框架&#xff0c;适用于各种数据处理任务。本文将详细介绍如何使用Apache Beam进行批处理和流处理&#xff0c;并通过Java…

从0开始基于transformer进行股价预测(pytorch版本)

目录 数据阶段两个问题开始利用我们的代码进行切分 backbone网络训练效果 感觉还行&#xff0c;没有调参数。源码比较长&#xff0c;如果需要我后续会发&#xff08;因为太长了&#xff01;&#xff01;&#xff09; 数据阶段 &#xff01;&#xff01;&#xff01;注意&#…

多个uilabel添加同一个UITapGestureRecognizer对象,只有最后那个生效么

如果多个 UILabel 添加同一个 UITapGestureRecognizer 对象&#xff0c;确实只有最后一个 UILabel 会响应手势。这是因为一个手势识别器只能被添加到一个视图上&#xff0c;多次添加实际上是重新指定该识别器的视图目标。 要实现多个 UILabel 响应相同的手势&#xff0c;可以为…

还不懂 OOM ?详解内存溢出与内存泄漏区别!

内存溢出与内存泄漏 1. 内存溢出&#xff08;Out Of Memory&#xff0c;OOM&#xff09; 概念&#xff1a; 内存溢出是指程序在运行过程中&#xff0c;尝试申请的内存超过了系统所能提供的最大内存限制&#xff0c;并且垃圾收集器也无法提供更多的内存&#xff0c;导致程序无…

# Redis 入门到精通(一)数据类型(3)

Redis 入门到精通&#xff08;一&#xff09;数据类型&#xff08;3&#xff09; 一、redis 数据类型–set 类型介绍与基本操作 1、set 类型 新的存储需求: 存储大量的数据&#xff0c;在查询方面提供更高的效率。需要的存储结构: 能够保存大量的数据&#xff0c;高效的内部…

【爬虫】解析爬取的数据

目录 一、正则表达式1、常用元字符2、量词3、Re模块4、爬取豆瓣电影 二、Xpath1、Xpath解析Ⅰ、节点选择Ⅱ、路径表达式Ⅲ、常用函数 2、爬取豆瓣电影 解析数据&#xff0c;除了前面的BeautifulSoup库&#xff0c;还有正则表达式和Xpath两种方法。 一、正则表达式 正则表达式…

C++|智能指针

目录 引入 一、智能指针的使用及原理 1.1RAII 1.2智能指针原理 1.3智能指针发展 1.3.1std::auto_ptr 1.3.2std::unique_ptr 1.3.3std::shared_ptr 二、循环引用问题及解决方法 2.1循环引用 2.2解决方法 三、删除器 四、C11和boost中智能指针的关系 引入 回顾上…

谷粒商城学习笔记-19-快速开发-逆向生成所有微服务基本CRUD代码

文章目录 一&#xff0c;使用逆向工程步骤梳理1&#xff0c;修改逆向工程的application.yml配置2&#xff0c;修改逆向工程的generator.properties配置3&#xff0c;以Debug模式启动逆向工程4&#xff0c;使用逆向工程生成代码5&#xff0c;整合生成的代码到对应的模块中 二&am…

VPS拨号服务器:独享的高效与安全

在当今互联网高速发展的时代&#xff0c;虚拟私人服务器&#xff08;VPS&#xff09;已成为许多企业和个人用户托管网站、应用程序的首选。特别是带有拨号功能的VPS服务器&#xff0c;以其独特的优势受到广泛关注。本文将深入探讨VPS拨号服务器的独享特性&#xff0c;以及它如何…

Vue 使用Audio或AudioContext播放本地音频

使用Audio 第一种 使用标签方式 <audio src"./tests.mp3" ref"audio"></audio><el-button click"audioPlay()">播放Audio</el-button>audioPlay() {this.$refs.audio.currentTime 0;this.$refs.audio.play();// this.$…

c++方法

std::transform方法 std::transform 是 C 标准库算法中的一个非常有用的函数&#xff0c;它定义在头文件 中。这个函数用于将给定范围内的每个元素按照指定的操作进行转换&#xff0c;并将转换结果存储在另一个位置&#xff08;可以是原始范围的另一个容器&#xff0c;或者完全…

HarmonyOS应用开发前景及使用工具

HarmonyOS应用开发001 文章目录 前言前景一、技术特性二、使用工具1.项目目录结构 前言 学习之前&#xff0c;需要有一定的开发基础&#xff08;如&#xff1a;java、c#、c、WEB前端的一些了解)。 HarmonyOS开发使用的ArkTS&#xff0c;ArkTS是在TS的基础之上进行封装的&#…

外科休克病人的护理

一、引言 休克是外科常见的危急重症之一,它是由于机体遭受强烈的致病因素侵袭后,有效循环血量锐减、组织灌注不足所引起的以微循环障碍、细胞代谢紊乱和器官功能受损为特征的综合征。对于外科休克病人的护理,至关重要。 二、休克的分类 外科休克主要分为低血容量性休克(包括…

VMware Workstation 虚拟机网络配置为与主机使用同一网络

要将 VMware Workstation 虚拟机网络配置为与主机使用同一网络&#xff0c;我们需要将虚拟机的网络适配器设置为桥接模式。具体步骤如下&#xff1a; 配置 VMware Workstation 虚拟机网络为桥接模式 打开 VMware Workstation&#xff1a; 启动 VMware Workstation。 选择虚拟机…

博客网站目录网址导航自适应主题php源码

开源免费 博客屋网址导航自适应主题php源码v1.0是一款免费开源的PHP分类导航建站程序&#xff0c;源代码公开且无任何加密代码、安全有保障、无后门隐患。 系统稳定 内核安全稳定、PHPMYSQL/Sqlite架构、跨平台运行;版本自带ico接口集成&#xff0c;添加网站时&#xff0c;可自…