【BZOJ 4169】 4169: Lmc的游戏 (树形DP)

4169: Lmc的游戏

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 44  Solved: 25

Description

RHL有一天看到lmc在玩一个游戏。
"愚蠢的人类哟,what are you doing",RHL说。
"我在玩一个游戏。现在这里有一个有n个结点的有根树,其中有m个叶子结点。这m个叶子从1到m分别被给予了一个
号码,每个叶子的号码都是独一无二的。一开始根节点有一个棋子,两个玩家每次行动将棋子移动到当前节点的一
个儿子节点。当棋子被移动到某个叶节点的时候游戏结束,这个叶节点的号码即为该局游戏的result。先手的玩家
要最大化result,后手的玩家要最小化这个result。"
"你不先问一下我是谁吗 = ="
"那么,who are you"
"我是这个世界的创造者,维护者和毁灭者,整个宇宙的主宰,无所不知,无所不能的,三个字母都大写的RHL。"
"既然你这么厉害,那你一定知道,在两个玩家都无限聪明的情况下,在树的形态已知的情况下,在叶子的编号可
以任意安排的情况下,游戏的result最大是多少咯。"

Input

输入数据第一行有一个正整数n,表示结点的数量。n<=200000
接下来n-1行,每行有两个正整数u和v,表示的父亲节点是u。

Output

输出一行2个非负整数,分别表示result的最大值和最小值。

Sample Input

5
1 2
1 3
2 4
2 5

Sample Output

3 2
【样例解释】
有3,4,5三个叶子。若令3号叶子的编号是3,则先手可以移到3号结点,故result最大是3。若3号叶子的编号是2,
则先手可以移到3号结点,故result最小是2.

HINT

Source

【分析】
【想出来了
然而网上没有题解,我就写写,好少人做这题。
如果你是先手的话,你肯定选子树里面能得到答案最大的那个走。
如果你是后手的话,你肯定选子树里面能得到答案最小的那个走。
$mx[i]$表示走$i$这棵子树,$result$最大是多少(指的是,你在子树填入$a1<a2<a3...$最大是排名第几的,下同)。
$mn[i]$表示走$i$这棵子树,$result$最小是多少。
当你是偶数层($root$这层视为0),即先手操作,你应该是$result=max(子树1,子树2,子树3....)$
最大化$result$显然是让各子树的$result$都最大化,然后呢,因为你取的是$max$,所以最好就是把其他子树都堆在前面,然后让$mx$最大的子树放在最后。
即$mx[x]=max(mx[x],sm[x]-(sm[y]-mx[y]))$; (sm是子树里面的叶子节点个数)
最小化$result$就是让子树都先选$1~mn$放在前面,即$mn[x]+=mn[y]$;
其实解题本质,就是你自己想想怎么样分配最好嘛。。
当$dep$为奇数,是$result=min(max(),max(),...)$这样的形式如下
$mx[x]=\sum (mx[y]-1) +1$;

  $mn[x]=min(mn[x],mn[y])$;

 

  也不知道怎么说。。

 

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 #define INF 0xfffffff
 8 #define Maxn 200010
 9 
10 int mymax(int x,int y) {return x>y?x:y;}
11 int mymin(int x,int y) {return x<y?x:y;}
12 
13 int mx[Maxn],mn[Maxn];
14 
15 struct node
16 {
17     int x,y,next;
18 }t[Maxn];
19 int first[Maxn],len;
20 void ins(int x,int y)
21 {
22     t[++len].x=x;t[len].y=y;
23     t[len].next=first[x];first[x]=len;
24 }
25 
26 int sm[Maxn];
27 void dfs(int x,int dep)
28 {
29     sm[x]=0;
30     if(first[x]==0) 
31     {
32         sm[x]=1;
33         mn[x]=mx[x]=1;return;
34     }
35     for(int i=first[x];i;i=t[i].next)
36     {
37         int y=t[i].y;
38         dfs(y,dep^1);
39         sm[x]+=sm[y];
40     }
41     mx[x]=0;mn[x]=0;
42     if(dep) mx[x]=1,mn[x]=INF;
43     for(int i=first[x];i;i=t[i].next)
44     {
45         int y=t[i].y;
46         if(!dep)
47         {
48             mx[x]=mymax(mx[x],sm[x]-(sm[y]-mx[y]));
49             mn[x]+=mn[y];
50         }
51         else
52         {
53             mx[x]+=mx[y]-1;
54             mn[x]=mymin(mn[x],mn[y]);
55         }
56     }
57 }
58 
59 int main()
60 {
61     int n;
62     scanf("%d",&n);
63     int rt=0;
64     for(int i=1;i<=n;i++) rt+=i;
65     len=0;
66     memset(first,0,sizeof(first));
67     for(int i=1;i<n;i++)
68     {
69         int x,y;
70         scanf("%d%d",&x,&y);
71         ins(x,y);
72         rt-=y;
73     }
74     dfs(rt,0);
75     printf("%d %d\n",mx[rt],mn[rt]);
76     return 0;
77 }
View Code

 

转载于:https://www.cnblogs.com/Konjakmoyu/p/6691849.html

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

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

相关文章

【深度学习】Tensorflow完成线性回归对比机器学习LinearRegression()

首先构建一个线性的点状图 import warnings warnings.filterwarnings(ignore) import numpy as np import matplotlib.pyplot as plt %matplotlib inline from sklearn.linear_model import LinearRegression import tensorflow as tf X np.linspace(2,12,50).reshape(-1,1)w…

ajax同步和异步的区别_同步电机和异步电机区别

电工之家&#xff1a;www.dgzj.com QQ群&#xff1a;2179090关注电工之家官方微信公众号“电工之家”&#xff0c;收获更多经验知识。同步电机和异步电机之间从区别就在于转子内的励磁电流&#xff0c;同步电机的转子励磁电流来自外界直流电源&#xff0c;转速恒定只与电机定…

解决:TypeError: Value passed to parameter 'a' has DataType int64 not in list of allowed values: float1

报错&#xff1a; TypeError: Value passed to parameter a has DataType int64 not in list of allowed values: float16, float32, float64, int32, complex64, complex128原因 1.4.0版本 默认int64 代码内容&#xff1a; 改正 定义符合 格式

买电脑主要看什么配置_我的专业要买什么配置电脑可以用到毕业?

电脑是现代生活中不可缺少的工具智能手机的更新让许多轻量工作可以在手机上完成但复杂的文档办公、大型的音视频编辑专业的数据处理等等还是离不开电脑的操作高考结束后许多同学做的第一件事是买新手机、新电脑有的为了考后放松玩游戏有的出于兴趣学习新技能也有的同学还在考虑…

CSS3实现一束光划过图片、和文字特效

在打折图标里面 实现一道白光划过的动画效果 css: <!DOCTYPE html><html><head><meta charset"utf-8"> <style> p{ width:15%; margin:0 auto; line-height:50px; font-size:30px; text-align:center; transform-origin: 50px 50px;…

H.264编解码流程

编码&#xff1a; 蓝色的前向编码流程&#xff1a;以宏块为输入单位介绍优于以帧为单位介绍。Fn为即将进行编码的宏块&#xff0c;由原始图像中16*16像素构成。每个宏块要么采用帧内模式编码&#xff0c;要么采用帧间模式编码。不管是哪种编码模式&#xff0c;预测宏块P都是基…

远程管理服务器的具体操作方法

远程是管理服务器最常见的一种方式&#xff0c;租用服务器也好&#xff0c;把服务器托管给服务商也好&#xff0c;肯定不会经常去机房办公&#xff0c;有什么问题的话大家都是选择远程服务器。其实远程服务器就跟我们远程电脑是一样的&#xff0c;具体需要怎么操作可能有的人还…

JavaWeb基础—dbutils的简单入门

简明入门教程&#xff0c;参考&#xff1a;https://www.cnblogs.com/CQY1183344265/p/5854418.html 进行此章节之前&#xff0c;介绍一个JdbcUtils的再次的简单封装 &#xff08;例如后面需要构造QueryRunner时得到数据源等的简便的操作&#xff09; package cn.itcast.jdbcuti…

macos安装vscode_VS Code 代码编辑器入门指南:核心组件与概念

作者&#xff1a;思考问题的熊写在前面如果当电脑只能装一个软件还需要尽量不影响日常学习工作时&#xff0c;不知道你的选择会是什么。我把这个看似「荒诞」的问题理解为「All-in-One」的升级版拷问。这个问题陪伴了我很久&#xff0c;每用一个软件我都会想想它对我究竟有多不…

环路滤波一些概念

熵编码需要编码的数据如下&#xff1a; 熵编码需要编码的数据如下&#xff1a;

【深度学习】TensorFlow之卷积神经网络

卷积神经网络的概念 在多层感知器&#xff08;Multilayer Perceptrons&#xff0c;简称MLP&#xff09;中&#xff0c;每一层的神经元都连接到下一层的所有神经元。一般称这种类型的层为完全连接。 多层感知器示例 反向传播 几个人站成一排第一个人看一幅画&#xff08;输入数…

golang 的交叉编译

为什么80%的码农都做不了架构师&#xff1f;>>> Go是一门编译型语言&#xff0c;所以在不同平台上&#xff0c;需要编译生成不同格式的二进制包。 由于Go 1.5对跨平台编译有了一些改进&#xff0c;包括统一了编译器、链接器等。 编译时候只需要指定两个参数&#x…

【深度学习】Cifar-10-探究不同的改进策略对分类准确率提高

cifar10数据集上进行图片分类&#xff0c;基于tensorflow框架&#xff0c; 旨在探究不同的改进策略对分类准确率的影响&#xff0c;如何一步步得提高准确率 一、问题描述 当我们在处理图像识别或者图像分类或者其他机器学习任务的时候&#xff0c;我们总是迷茫于做出哪些改进…

Acer 4750 安装黑苹果_黑苹果 MacOS 10.15 Catalina安装教程

一、准备工作一个8G以上的U盘(安装 10.15 Catalina 必须要16G及以上的U盘 )&#xff1b;Mac OS镜像、TransMac(刻录工具)、DiskGenius(分区工具)、EasyUEFI(引导工区)、EFI驱动文件。安装工具获取方式&#xff1a;关注公众号【远景论坛】&#xff0c;回复&#xff1a;黑苹果二、…

帧内16*16模式的宏块数据传输顺序

如果宏块以16*16帧内模式编码&#xff0c;那么块-1首先被传输&#xff0c;携带的信息是每个4*4亮度块的DC系数。然后&#xff0c;亮度残差块0-15被传输&#xff08;此时&#xff0c;16*16帧内宏块的DC系数为零&#xff09;。对于亮度分量Cb和Cr&#xff0c;16和17块携带DC系数的…

pcie1 4 速度_太阳系行星们谁转得最快?八大行星自转速度排行榜,地球排第五...

不知道大家有没有玩儿过陀螺呢&#xff1f;玩儿陀螺的技术如果很好的话&#xff0c;它可以在地上飞快地旋转并且能够旋转很长的时间。有趣的是&#xff0c;宇宙中的很多星球就像陀螺一样绕着一个中心轴旋转着。这就是星球的自转。在太阳系中有八颗大行星&#xff0c;它们都在自…

分布式资本沈波:未来区块链杀手级应用将出现在“+区块链”

雷锋网5月22日报道&#xff0c;日前“区块链技术和应用峰会”在杭州国际博览中心举行。会上&#xff0c;分布式资本创始管理人沈波作了《区块链的投资现状与发展趋势》演讲。 沈波表示&#xff0c;由于区块链的共识机制和无法篡改两大特点&#xff0c;它在各行各业皆有应用潜力…

帧间预测小记

帧间预测后&#xff0c;在比特流中会有相应的信息&#xff1a;残差信息&#xff0c;运动矢量信息&#xff0c;所选的模式。 宏块的色度分量分辨率是亮度分辨率的一半&#xff08;Cr和Cb&#xff09;&#xff0c;水平和垂直均一半。色度块采用和亮度块一致的分割模式&#xff0…

ImageJ Nikon_科研论文作图之ImageJ

各位读者朋友们又见面了&#xff0c;今天给大家介绍一款图片处理软件——ImageJ&#xff0c;这是一款免费的科学图像分析工具&#xff0c;广泛应用于生物学研究领域。ImageJ软件能够对图像进行缩放、旋转、扭曲、模糊等处理&#xff0c;也可计算选定区域内分析对象的一系列几何…

【urllib】url编码问题简述

对url编解码总结 需要用到urllib库中的parse模块 import urllib.parse # Python3 url编码 print(urllib.parse.quote("天天")) # Python3 url解码 print(urllib.parse.unquote("%E5%A4%E5%A4%")) urlparse() # urllib.parse.urlparse(urlstring,scheme,…