A. Parsa‘s Humongous Tree(树形DP + 贪心)

news2024/11/26 0:47:28

Problem - 1528A - Codeforces

 

两个玩家正在玩一个游戏。他们有一个整数1,2,...,n的排列组合(排列组合是一个数组,其中从1到n的每个元素正好出现一次)。这个排列组合没有按升序或降序排序(即排列组合没有[1,2,...,n]或[n,n-1,...,1]的形式)。

最初,排列组合的所有元素都被染成红色。玩家轮流进行。在他们的回合中,玩家可以做三个动作之一。

重新排列组合的元素,使所有红色元素保持它们的位置(注意,蓝色元素可以相互交换,但这不是必须的)。
将一个红色元素的颜色改为蓝色。
跳过这一轮。
如果排列组合以升序排序(即变成[1,2,...,n]),则第一个玩家获胜。如果排列顺序为降序(即变成[n,n-1,...,1]),则第二个玩家获胜。如果游戏持续了100500个回合,没有人获胜,则以平局结束。

你的任务是确定如果双方都以最佳方式进行游戏,游戏的结果是什么。

输入
第一行包含一个整数t(1≤t≤105)--测试案例的数量。

每个测试案例的第一行包含一个整数n(3≤n≤5⋅105)--排列组合的大小。

第二行包含n个整数p1,p2,...,pn--排列组合本身。排列组合p不按升序或降序排序。

所有测试案例的n之和不超过5⋅105。

输出
对于每个测试案例,如果第一个玩家获胜,则打印 "第一",如果第二个玩家获胜,则打印 "第二",如果结果是平局,则打印 "平局"。

例子
inputCopy
4
4
1 2 4 3
3
2 3 1
5
3 4 5 2 1
6
1 5 6 3 2 4
outputCopy
第一个
捆绑
第二个
捆绑
注意
让我们看看在第一个例子中第一个玩家是如何获胜的。

他们应该在前两个回合中把元素3和4涂成蓝色,然后他们可以把蓝色元素重新排序,使排列组合成为[1,2,3,4]。第二位棋手既不能干扰这个策略,也不能更快获胜。

题解:

我们每次选每个点的边界值就能够得到最优答案,现在来对这种贪心思路做出证明:

我们假设一个点x的所有子节点的数字都已经确定,我们先在x可选的区间内随意选择一个值y,

假如他的子结点中的数字大于y的有p个,小于y的有q个,

则对于x的边的最大价值∑| ax−aj | (j为x的子节点) 则会增加q,减少p,如果p>q,

为了使最大价值增加,我们应该使y尽可能小,达到左边界时取得最大值,

反之如果p<q,那我们应该使y尽可能增大,使得y到达右边界,

这样我们就证明了最优答案一定是取在边界值上得到的。

剩下的就是一个树形dp了
 

#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include<cstring>
#include<cmath>
using namespace std;
#define int long long
vector<int> p[200050];
int l[200050],r[200050];
int dp[200050][2];
int ans ;
int dfs(int now,int fa)
{
	for(auto k : p[now])
	{
		if(k == fa)
		continue;
		dfs(k,now);
		dp[now][0] += max(abs(l[now] - l[k])+dp[k][0],abs(l[now] - r[k])+dp[k][1]);
		dp[now][1] += max(abs(r[now] - l[k])+dp[k][0],abs(r[now] - r[k])+dp[k][1]);
	}
}
void solve()
{
	int n;
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		p[i].clear();
		dp[i][0] = dp[i][1] = 0;
	}
	for(int i = 1;i <= n;i++)
	cin >> l[i] >> r[i];
	for(int i = 1;i < n;i++)
	{
		int x,y;
		cin >> x >> y;
		p[x].push_back(y);
		p[y].push_back(x); 
	}
	ans = 0;
	dfs(1,0);
	cout << max(dp[1][1],dp[1][0])<< "\n";
}
//3 8 4
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t = 1;
	cin >> t;
    while(t--)
	{
		solve();
	} 
}

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

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

相关文章

智能遥测终端机——微功耗设计的物联网网关

一、产品概述 智能遥测终端机是一款采用微功耗设计的物联网网关&#xff0c;采用内置电池组供电&#xff0c;支持对模拟量、开关量、RS485传感器采集并通过NB-IoT或4G通讯方式传输数据。智能遥测终端机支持参数远程升级、远程配置、蓝牙配置等&#xff0c;智能遥测终端机集成高…

1572_AURIX_TC275_SCU中的锁步以及芯片温度采集

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这个是锁步控制寄存器&#xff0c;其实是一个控制以及状态综合的寄存器。可以读取到现在的锁步设置状态&#xff0c;也可以进行锁步的使能。 这个寄存器跟上面这一个页一样&#xff0c;只是…

开发1-5年的Java程序员,该学习哪些知识实现涨薪30K?

工作已经8年有余&#xff0c;这8年里特别感谢技术管理人员的器重&#xff0c;以及同事的帮忙&#xff0c;学到了不少东西。这8年里走过一些弯路&#xff0c;也碰到一些难题&#xff0c;也受到过做为一名开发却经常为系统维护和发布当救火队员的苦恼。遂决定梳理一下自己所学的东…

11_逆向工程

MyBatis的一个主要的特点就是需要程序员自己编写SQL&#xff0c;那么如果表太多的话&#xff0c;难免会很麻烦&#xff0c;所以MyBatis官方提供了一个逆向工程&#xff0c;可以针对单表自动生成MyBatis执行所需要的代码&#xff08;包括mapper.xml&#xff0c;mapper.java&…

数据安全治理笔记

数据安全治理整理概述 数据安全治理不仅局限于组织内部&#xff0c;而是需要一个国家、行业组织、可言机构、企业和个人共同努力完成的课题。因此&#xff0c;应该分别重广义和狭义的角度看待数据安全治理。 广义地说&#xff1a;数据安全治理是在过数据安全战略的知道下&…

状态寄存器传送指令 —— 访问(读写)CPSR寄存器

CPSR寄存器控制着CPU的工作模式和运算状态&#xff0c;出于对CPSR的保护&#xff0c;不允许其他指令来访问CPSR寄存器。 因此&#xff0c;ARM提供了读写指令来操作CPSR寄存器&#xff0c;这两个指令是ARM特有的指令集&#xff0c;因为处理器之间存在一定差异&#xff0c;控制状…

在React中组件间过渡动画如何实现?

用transition 只能作一些最简单的动画,如果稍微复杂一点就做不出来了,这时候就可以用CSS3中的keyframes 像下面这样通过css实现动画: .show {animation:show-item 2s ease-in forwards; } .hide {animation:hide-item 2s ease-in forwards; }@keyframes hide-item{

STM32F051——USART

我在大二学32的时候曾经写过一篇博客&#xff0c;现在看了一个韩老师的专题课后再来完善一下32串口方面的知识。所有的知识都可在官方手册中找到&#xff0c;目前我认为学习一个新的芯片&#xff0c;最全最细的就是官方手册了&#xff0c;英文看不懂可以看中文的&#xff0c;不…

Nessus破解教程

Nessus 最新版破解教程0x01 Nessus 简介0x02 Nessus 下载0x03 Nessus 安装0x04 更新漏洞库0x05 Nessus 破解0x06 Nessus 使用0x07 注意事项参考文章0x01 Nessus 简介 Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用 Nessus 作为扫描该机…

跟着 gma 学 Python:矢量面文件的空间绘图

得益于 gdal 的强大功能&#xff0c;gma 继承了其对各类栅格/矢量&#xff08;目前支持超过80种矢量文件格式&#xff09;文件的读取支持&#xff0c;并在其基础上进行简化、优化等改造&#xff0c;以便其符合 gma 的整体建库逻辑。   本文基于 gma 定义的矢量读取逻辑和方式…

26 CPP运算符重载

#include <iostream>using namespace std;//非成员函数重载 - class Person { public:Person() {m_score 0;m_name.clear();}void show() {cout << m_name << " " << m_score << endl;}int m_score;string m_name; };//全局重载号 vo…

毕业设计 - 基于SSH码头船只出行及配套货柜码放 管理系统【源码 + 论文】

文章目录前言一、项目设计1. 模块设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 java web设计项目: 基于SSH码头船只出行及配套货柜码放 管理系统 一、项目设计 1. 模块设计 对于码头日常管理来说&#xff0c;主要是码头船只的管理&#xff0c;码头信息的…

【leetcode.15】三树枝和

题目描述如上 要点分析&#xff1a; 遍历出所有的情况不难&#xff0c;难的是如果和处理重复的结果 纯暴力&#xff0b;检索的话复杂度为n3&#xff0c;最后面的三个测试点会超时 所以这里使用双指针法进行处理&#xff0c;复杂度会变为n2 算法分析&#xff1a; 为了避免…

Java+SSM家庭理财管理系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用技术&#xff1a;SSM框架MySQL数据库Tomcat服务器&#xff0c;项目含有源码、文档、配套开发软件、软件安装教程、项目发布教程等 项目功能介绍&#xff1a; 用户分为系统管理员和普通用户两个角色&#xff0c;普通用户可自行注册登录&#xff0c;系统…

【图像处理】Hough变换人眼虹膜定位【含Matlab源码 387期】

⛄一、数字图像处理简介 图像处理基础教程链接 1 【基础教程】基于matlab图像处理&#xff08;表示方法数据结构基本格式类型转换读取点运算代数运算&#xff09;【含Matlab源码 834期】 2 【基础教程】基于matlab图像处理&#xff08;读写显示运算转换变换增强滤波分析统计&a…

计算机毕设Python+Vue学生宿舍管理系统 (程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【遥感科学】第二章 电磁辐射和地物光谱特性

第二章 电磁辐射与地物光谱特征 一、电磁波谱与电磁辐射 1.1 磁波谱 我们说波谱波谱&#xff0c;那么什么是波&#xff0c;什么是谱呢&#xff1f;注意看&#xff0c;这个男人叫小帅 振动的传播称为波&#xff0c;那电磁波又是啥&#xff1f;啥叫电磁振动&#xff1f; 当电…

docker常用命令记录

1.docker加载镜像 sudo docker load --input rknn-toolkit-1.7.3-docker.tar.gz 2.查看镜像 sudo docker images 3.进入docker容器 sudo docker run -t -i --privileged rknn-toolkit:1.7.3 /bin/bash 4.退出容器 eixt 5.查看所有容器 sudo docker ps -a 6.开启容…

截止12.19--之前的再说,就先说一下今天的事

12/19 错怪colab 软链接实现永久 试一下我在ssh传上文件以后&#xff0c;1080卡还能不能看见了&#xff1a;能&#xff0c;得传到data里。可以在ssh上加上 ln -s 找不到GPU是镜像问题 出现找不到显卡的问题 需要换个镜像 所以速速自学docker吧&#xff0c;太被动了 加号做连…

基于AD Event日志识别黄金票据攻击

01、简介黄金票据(Golden Ticket)是基于Kerberos认证的一种攻击方式&#xff0c;常用来做域控权限维持。当攻击者获取到域内krbtgt帐户的SID和HASH&#xff0c;就可以随意伪造域内管理员用户&#xff0c;再加上域帐户krbtgt的密码基本不会更改&#xff0c;即使域管修改了密码&a…