【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.pswp.cn/news/456034.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456034.shtml
英文地址,請注明出處:http://en.pswp.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…