【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,一经查实,立即删除!

相关文章

python中的string模块

String模块 ascii_letters 获取所有ascii码中字母字符的字符串&#xff08;包含大写和小写&#xff09;ascii_uppercase 获取所有ascii码中的大写英文字母ascii_lowercase 获取所有ascii码中的小写英文字母digits 获取所有的10进制数字字符octdigits 获取所有的8进制数字字…

《电路分析导论(原书第12版)》一1.2.2 真空电子时代

本节书摘来华章计算机《电路分析导论&#xff08;原书第12版&#xff09;》一书中的第1章 &#xff0c;第1.2.2节&#xff0c;&#xff08;美&#xff09; Robert L.Boylestad 著 陈希有 张新燕 李冠林 等译更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.2.2 …

【深度学习】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;转速恒定只与电机定…

vue实例

1.构造器 1.1.每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的&#xff1a; 1.2.在实例化 Vue 时&#xff0c;需要传入一个选项对象&#xff0c;它可以包含数据、模板、挂载元素、方法、生命周期钩子等选项。 1.3.可以扩展 Vue 构造器&#xff0c;从而用预…

MPEG4 H.264学习笔记之三 ------ 熵编码

3.5 熵编码熵编码把一系列用来表示视频序列的元素符号转变为一个用来传输或是存储的压缩码流.输入的符号可能包括量化的变换系数(像上面所说的运行级或零树),运动向量(对于每个运动补偿块的向量值x和y),标记(在序列中用来表示重同步位的点),头(宏块头,图象头,序列的头等)以及附…

python中的数学模块

数学模块 引入模块&#xff1a;import math 注意&#xff1a; 使用某个模块下的函数&#xff0c;必须先引入这个模块&#xff0c;否则无法正常使用。 ceil() 向上取整操作 格式&#xff1a;math.ceil(数值) 返回值&#xff1a;整型floor() 向下取整操作 格式:math.floor(数值…

公共交通WiFi末路?公交WiFi重挫 地铁WiFi承受盈利压力

之前&#xff0c;公交WiFi运营方16WiFi因收支严重失衡宣布暂时关闭在11个城市的公交WiFi运营&#xff0c;这引发了业内对公共WiFi企业生存状态的关注。 在公共WiFi领域&#xff0c;除了公交WiFi&#xff0c;另一重要市场就是地铁WiFi。作为目前国内规模最大的地铁WiFi运营方&am…

解决: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;具体需要怎么操作可能有的人还…

python中的OS模块

OS模块 OS 操作系统的简称 os模块就是对操作系统进行操作&#xff0c;使用该模块必须先导入模块&#xff1a; import osos模块中的函数 getcwd() 功能&#xff1a;获取当前的工作目录 格式&#xff1a;os.getcwd() 返回值&#xff1a;路径字符串chdir() 功能&#xff1a;修改…

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;输入数…

python中的zip模块

zip压缩 引入模块&#xff1a; import zipfilezip文件格式是通用的文档压缩标准&#xff0c;在ziplib模块中&#xff0c;使用ZipFile类来操作zip文件&#xff0c;下面具体介绍一下&#xff1a; zipfile.ZipFile(file[, mode[, compression[, allowZip64]]]) 功能&#xff1a;…

[LeetCode] 35. Search Insert Position

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You may assume no duplicates in the array. Here are few examples.[1,3,5,6], 5 → 2[1,3,5,6], 2 → 1[1…