GYM 100796C Minimax Tree

[人工智能导论学习笔记] Minimax 剪枝往往结果是好的,能减少不必要的递归提升效率,但是其本质任然是一个深度遍历递归,当通过评估函数得到的评估值很极端时就会导致剪不了几条枝叶,达不到提升性能的目的(像上面这个例子,基本上就剪了一条无关紧要的,其他还是得遍历🙃)Minimax - 当我们的对手表现最佳时使用,可以使用α-β修剪进行优化。万一遇上不太聪明的队手呢。。。Minimax提供了比expectimax更保守的操作,因此往往当对手未知时,会产生有利的结果。 阅读详情
C. Minimax Tree
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Bob's new favourite toy is a rooted tree that consists of n vertices numbered from 1 to n. The number of the root vertex is 1. The tree has l leafs (the root is not considered to be a leaf). Each leaf of the tree has an integer written in it.

This birthday Bob received n - l stickers as a gift: k of them are labelled "min", and the other n - l - k are labelled "max". Bob has decided to place the stickers on the internal vertices of the tree, a single sticker on each internal vertex.

Once he has placed all the stickers on the tree, Bob would like to calculate a function f for each vertex v of the tree in the following fashion:

  • If v is a leaf, f(v) is equal to the integer that is written in v.
  • If v has a "min" sticker, f(v) is equal to the minimum value of f(u), where u is any child of v.
  • If v has a "max" sticker, f(v) is equal to the maximum value of f(u), where u is any child of v.

Bob isn't yet sure how to place his stickers on the tree, but he is interested in the value of f in the root vertex. Given the tree and the stickers, help Bob calculate the minimum and the maximum possible value of f(1)!

Input

The first line contains two space-separated integers n and k (2 ≤ n ≤ 105, 0 ≤ k ≤ n). The second line contains n - 1 space-separated integer numbers p2, p3, ..., pn (1 ≤ pi ≤ n). The number pi denotes the parent of the vertex numbered i. The third line contains nspace-separated integer numbers a1, a2, ..., an (0 ≤ ai ≤ 109). If the vertex i is a leaf, then ai is the number written in that vertex. Otherwise ai will be equal to 0.

It is guaranteed that the given graph will be a tree. It is guaranteed that k + l ≤ n.

Output

In a single line output two integers separated by a space — the minimum and the maximum possible value of f(1).

Sample test(s)
input
6 1
1 1 2 2 3
0 0 0 1 3 2
output
2 3
Note

A tree is a connected graph that has no cycles. A rooted tree is a tree with one vertex being the root vertex. In a rooted tree, a vertex uis a child of v if and only if there is an edge between v and u, and u does not belong to the path that connects the root vertex with v. The vertex v then is called the parent of u. A vertex of a rooted tree is called a leaf if and only if it has no children. Otherwise the vertex is called an internal vertex.

题目链接

http://codeforces.com/gym/100796/problem/C

题目大意

给出一棵n个节点的树,有l个叶节点,每个叶节点都有一个value值,现有k个min标签,n-l-k个max标签,安排中间节点的标签,输出根节点的最大值和最小值。

解题思路

        就最小值来讲,要想让某一个节点的值最终传递到根节点,它的祖先节点中有两个或两个以上子节点的必须全部采用min标签,最大值亦然。

        所以dfs处理出每个节点的最大值和最小值,d<=k的节点中最大值的最小值就是根节点的最小值,d<=n-l-k的节点中最小值的最大值就是根节点的最大值。需要注意的就是一个节点只有一个子节点时,子节点的d值不+1。

AC代码

import java.util.*;
public class Main {
	static int n,k,l,ee,a,b;
	static int[] max=new int[100010];
	static int[] min=new int[100010];
	static int[] val=new int[100010];
	static int[] size=new int[100010];
	static int[] head=new int[100010];
	static int[] edge=new int[100010];
	static int[] next=new int[100010];
	static void add(int a,int b)
	{
		edge[ee]=b;next[ee]=head[a];
		head[a]=ee++;
	}
	static void dfs(int x,int d)
	{
		if(val[x]!=0) min[x]=max[x]=val[x];
		else { min[x]=2000000000;max[x]=0;}
		int v;
		for(int i=head[x];i!=-1;i=next[i])
		{
			v=edge[i];
			dfs(v,d+(size[v]==1?0:1));//坑点
			min[x]=Math.min(min[x],min[v]);
			max[x]=Math.max(max[x],max[v]);
		}
		if(d<=k) a=Math.min(a,max[x]);
		if(d<=n-l-k) b=Math.max(b,min[x]);
	}

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		n=in.nextInt();k=in.nextInt();
		Arrays.fill(head,-1);
		for(int i=2;i<=n;i++)
		{
			a=in.nextInt();
			add(a,i);size[a]++;
		}
		for(int i=1;i<=n;i++)
		{
			val[i]=in.nextInt();
			if(val[i]!=0) l++;
		}
		a=2000000000;b=0;
		dfs(1,0);
		System.out.println(a+" "+b);
	}
}


3.2 博弈树与极小化极大算法(Minimax) 博弈树是描述博弈过程中所有可能状态的树形结构,包含以下要素:根节点(Root):初始游戏状态(如棋盘的初始布局)。内部节点(Internal Node):中间决策点,表示玩家需要选择动作的位置。边(Edge):玩家的动作(如移动棋子、落子)。叶子节点(Leaf):终局状态,标注每个玩家的收益值(Utility)。 3. 博弈树的特性 完全性:覆盖所有可能的动作路径。对称性:若多个路径导致相同状态,可合并节点(但通常不合并以简化实现)。深度:树的层数等于最大动作步数(如井字棋最多9步)。对抗性 阅读详情

相关推荐

Minimax算法及实例分析

计算机科学中最有趣的事情之一就是编写一个人机博弈的程序。有大量的例子,最出名的是编写一个国际象棋的博弈机器。但不管是什么游戏,程序趋向于遵循一个被称为Minimax算法,伴随着各种各样的子算法在一块。    Minimax算法又名极小化极大算法,是一种找出失败的最大可能性中的最小值的算法。Minimax算法常用于棋类等由两方较量的游戏和程序,这类程序由两个游戏者轮流,每次执行一个步骤。我

我的专栏 3万+

极大极小博弈树(转)

 2008年11月15日 星期六 11:03       这篇文章将介绍一种对于所有的GameAI(游戏智能)开发来说都非常重要的数据结构。对于几乎每一个棋类博弈游戏程序来说,极大极小树( the minimax tree)都是其中的核心。极大极小博弈树(Minimax Game Tree,简写为MGT,译者注)用于编写电脑之间的游戏程序,这类程序由两个游戏者轮流,

zhp818的专栏 2726

人工智能中的minimax算法

Algorithms can search the game trees to determine the best move to make from the current state. The most well known is called the Minimax algorithm. The minimax algorithm is a useful method for simple...

weixin_26715991的博客 2643

博弈树搜索技术(Minimax算法,ɑ-β 算法)

博弈树搜索技术(Minimax算法,ɑ-β 算法)

MrGong123的博客 5918

2048-AI程序算法分析

转自:CodingLabs 针对目前火爆的2048游戏,有人实现了一个AI程序,可以以较大概率(高于90%)赢得游戏,并且作者在stackoverflow上简要介绍了AI的算法框架和实现思路。但是这个回答主要集中在启发函数的选取上,对AI用到的核心算法并没有仔细说明。这篇文章将主要分为两个部分,第一部分介绍其中用到的基础算法,即Minimax和Alpha-beta剪枝;第二部分分...

weixin_30627341的博客 1825

CMap数据库实战:从基因表达谱到药物重定位的可视化分析

本文详细介绍了如何利用CMap数据库进行药物重定位的可视化分析。通过实战演示,从差异基因列表准备、CMap查询参数设置,到结果筛选与高级可视化(如热图与OncoPrint风格图),系统讲解了从数据到洞察的全流程,并提供了关键的解读与验证指南,帮助研究者高效挖掘老药新用的潜力。

mango的博客 589

带有Alpha-Beta剪枝的Minimax(回溯分析)

带有Alpha-Beta修剪的Minimax 极小极大算法是一种在两人游戏中寻找最佳移动的方法。 Alpha-beta修剪是一种找到最佳minimax解决方案的方法,同时可以避免搜索不会被选择的动作子树。在两人游戏的搜索树中,有两种节点,一种代表您的 举动,另一种代表对手的举动。 代表您的移动的节点通常绘制为正方形(或可能是朝上的三角形): 这些也称为MAX节点。MAX节点的目标是最大化...

weixin_44406200的博客 1509

STM32F429网络通信避坑指南:用CubeMX搞定LAN8720+LWIP+FreeRTOS(附完整代码)

本文详细介绍了STM32F429通过CubeMX配置LAN8720+LWIP+FreeRTOS实现网络通信的避坑指南,涵盖硬件连接、CubeMX配置、LWIP优化及调试技巧,提供完整代码和实战经验,帮助开发者高效解决以太网通信中的常见问题。

weixin_26873711的博客 145

Gym 100796C Minimax Tree

Gym 100796C Minimax Treedfs 编程能力 想法 传送门:HustOJ 传送门:CodeForce 题意给出一棵n个节点的树,有l个叶节点,每个叶节点都有一个value值。现有k个min标签,n-l-k个max标签,安排中间节点的标签,输出根节点可能的最大值和最小值。min标签表示向上传递儿子中的最小值,max传递最大值。思路主要是dfs。 %%%1 %%%2

P.H.S 613

vivado:差分信号和单端信号 的相互转换 IBUFDS OBUFDS

FPGA能处理的都是单端信号,但有些输入信号是差分的,这时候就需要把差分信号转为单端信号。

qq_52137732的博客 1万+

Abaqus滞回问题求解—浆锚连接装配式剪力墙滞回模拟

当下土木工程研究生,多数都在从事装配式混凝土构件安全或装配式混凝土构件连接节点力学性能的研究。研究这类问题,几乎脱离不开对有限元软件的使用,Abaqus求解能力非常强大,但模型处理能力相对较弱。装配式混凝土结构的有限元计算与传统现浇结构相比,其节点处理起来相对复杂,计算结果往往需要凸显出连接节点力学特性,所以对建模精程度的要求较高。所以向大家介绍一款工具—HyperMesh软件(一下简称Hm),它是专业的有限元前处理工具,用于处理装配式混凝土构件或连接节点有限元模型比较合适。这篇文章主要介绍如何利用Hm处理

qq_31918049的博客 2903

【Gym - 100796C 】Minimax Tree

BUPT2017 wintertraining(15) #7FMinimax Tree 题意 给你一棵多叉树,非叶子节点中分配k个为子节点的min函数,剩下的是max函数。 现在求根节点(1)的最大值和最小值。 题解 因为最大值和最小值求法对称,以求最小值为例。 要让尽量小的上来,可以贪心选择一条路前面都是min不够了后面就用max。 因为如果min上面有max,max换到下面不会更差。...

dingguayi7025的博客 270

R链式中介:如何一次性生成4个变量所有可能的链式中介结果?(含结果解读与粗略作图)#bruceR#ggplot2

一次性生成4个变量所能生成的24种链式中介并作图

weixin_64183017的博客 3237

GYM-100796C-Minimax Tree【贪心】

题目大意:给出一棵树,根节点为1.只有叶子节点(有L个)有值,其余节点分为两类 1. min 节点: 当前节点的f值为孩子节点的f值最小的那个 2. max 节点: 当前节点的f值为孩子节点的f值最大的那个 有k个min节点,剩余的n-k-L个节点则为max节点,问1节点的f值最大和最小为多少?

Linoy 523

PX4从放弃到精通(二十一):使用git管理PX4代码

文章目录前言一、设置git密钥二、将代码上传至gitee 前言 Ubuntu 18.04 PX4 1.11.3 由于github有时网速较慢,本文使用gitee。 一、设置git密钥 ssh-keygen -t rsa -C “your_email@youremail.com” your_email@youremail.com为自己注册的gitee账户邮箱.设置路径与密码时,也直接回车不设置,如下图,密钥生成的位置在红框处. 在密钥目录下按Ctrl+H显示隐藏文件,进入.ssh文件夹用gedit打开id

超维空间科技的博客 3480

知识图谱-KGE-语义匹配-双线性模型-2018:SimplE

【paper】 SimplE Embedding for Link Prediction in Knowledge Graphs 【简介】 本文是加拿大英属哥伦比亚大学的两位学者发表在 NIPS 2018 上的工作,文章提出了 SimplE(Simple Embedding)。这篇和前面一篇差不多,也是对 1927 年的 CP 进行改进(简化),传统CP为实体分配的两个向量是独立训练的,SimplE利用关系的逆在三元组打分函数中加上了一个对称项,使得每个实体的两个向量依赖学习,并且 SimplE 的复杂度随

u013250861的博客 958

GYM 100796 C.Minimax Tree(dfs)

Description 给出一个nnn个节点lll个叶子节点的树,以111为根,给出每个叶子节点点权,对于非叶子节点,有kkk个点取其儿子节点中权值最大值作为自己的权值,有n−l−kn−l−kn-l-k个点取其儿子节点中权值最小值作为自己的权值,问111节点的权值最小值和最大值 Input 第一行输入两个整数n,kn,kn,k,之后输入n1n1n_1个整数p2,p2,...,pnp2,p2,...

ZSQ 465

自动识别象棋棋子的OpenCV应用

在计算机视觉领域,OpenCV是一个广泛应用的开源计算机视觉库,它提供了丰富的图像处理和分析工具。本文将介绍如何使用OpenCV实现自动识别象棋棋子的功能,并提供相应的源代码。通过以上代码,我们可以实现对棋盘图像中棋子的自动识别。需要注意的是,以上代码只是一个简单的示例,实际应用中可能需要根据具体情况进行参数调整和算法优化,以获得更好的识别效果。函数利用预处理后的图像,寻找图像中的轮廓,并根据轮廓的面积筛选出可能的棋子轮廓,最后在原图像中提取棋子区域。在主程序中,我们读取输入图像,并调用。

WzisTypescript的博客 908

gym100796C(想法题/二分+树形dp)

题目链接 C. Minimax Tree time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Bob's new favourite toy is a rooted

fouzhe的博客 581

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

2015-2016 ACM ICPC Baltic Selection Contest C Minimax Tree

题目描述:http://codeforces.com/gym/100796/problem/C题解:很好的一道题目. 正着做是树形dp,显然n太大. 我们习惯性的反着考虑,看一个值能不能成为最小值. 那么最小的那个只需要到根的距离的min就能够保证(1). 那次小的呢?就是在和比它大的汇合的时候一定要取一次min, 那么我们搞lca,在这里取min一定是最好的. 那么发现(1)也不准确了,

ruclion的专栏 440

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

学懂最小生成树,这篇文章就够了!

图是由顶点(Vertex)集合V和边(Edge)集合E组成的数据结构,通常表示为G=(V,E)。顶点代表图中的节点,边则表示节点之间的连接关系。根据边是否有方向,图可以分有向图和无向图;根据边是否有权重,图可以分为有权图和无权图。最小生成树是图G的一棵生成树,它包含图中的所有顶点,并且其边的权重之和最小。生成树是图的一个子图,它是一棵树,即无环且连通。

C++老手 1157

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Minimax算法

Minimax算法被广泛应用在棋类游戏中,是一种找出失败的最大可能性中的最小值的算法(Wikipedia)。 博弈树(game tree) 以“tic tac toe”游戏为例。从当前状态或初始状态开始,根据可以采取的行动(actions)和可以到达的状态(s),绘制子节点,再对子节点绘制子节点。直到游戏结束的状态。如下图这种树称为game tree。 Minimax算法 先从一个简单...

u012074597的专栏 2万+

Understanding The Minimax Algorithm-理解极小极大搜索算法

Understanding The Minimax Algorithm-理解极小极大搜索算法 One of the most interesting avenues of computerscience is that of programming a computer to play a game against a humanopponent....

weixin_30472035的博客 408

极小极大算法 (The Minimax Algorithm)

极小极大算法 (The Minimax Algorithm) https://blog.youkuaiyun.com/tangchenyi/article/details/22920031

专栏 1万+

用井字游戏理解 Minimax 算法

Minimax 算法是博弈论中使用的一种回溯算法,用于在假设您的对手也在采取最佳行动的情况下确定最佳行动。Minimax算法的使用是一种不涉及机器学习的人工智能形式。本文解释了 Minimax 算法,并探讨了如何使用它来确定井字游戏中的下一步。MiniMax 算法工作的条件为了将极小极大算法应用于游戏,一名玩家被指定为最大化玩家,另一名玩家被指定为最小化玩家。最大化玩家玩游戏以尝试获得最高分,而最小化玩家玩游戏以获得最低可能分数。在游戏的每一点,都可以评估棋盘以确定当前得分。如果最终得分为正结果,则最大化玩

allway2的博客 2565
下一篇: 二分图最大权匹配--KM算法模板
AC_Machine
博客等级 码龄11年 1粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值