Codeforces 892E Envy

问题描述

小Q正在玩一个叠塔的游戏,游戏的目标是叠出尽可能高的塔。在游戏中,一共有n张矩形卡片,其中第i张卡片的

长度为a_i,宽度为b_i。小Q需要把所有卡片按一定顺序叠成一座塔,要求对于任意一个矩形,它的长度要严格大

于它上边的任意一个矩形的长度。塔的高度为所有矩形的宽度之和。在游戏中,小Q可以将卡片翻转90度来使用,

而且必须用上全部n张卡片。请写一个程序,帮助计算小Q能叠出最高的塔的高度。

输入格式

第一行包含一个正整数n(1<=n<=250000),即卡片的个数。

接下来n行,每行两个正整数a_i,b_i(1<=a_i,b_i<=10^9),分别表示每张卡片的长度和宽度。

输出格式

输出一行一个整数,即最高的塔的高度,输入数据保证一定存在解。

样例输入

3
5 16
10 5
5 10

样例输出

20

解析

不妨将一个矩形放在底下的边视为长,另一边视为宽,若将两条边作为点连起来,为了满足单调递减的条件,每个长只能连向一个宽。那么这就变成了一个边定向问题。一条边的入点作为长,出点作为宽,则每个点的答案贡献为
\((d[i]-1)*val[i]\),其中\(d[i]\)表示与该点相连的边数,减一即为减去一个出边得到一共做了多少次宽。

注意到每个点仅有一个出边的性质,那么满足条件的连通块最后形成的结构为内向树或者内向基环树。如果是内向基环树则方案唯一,但如果是树的话,会有根节点答案为\(d[root]*val[root]\),即\(val[root]\)会多算一遍。所以我们应选最大的点为根节点。

关于判断是基环树还是树,因为树有n个点n-1条边,所以有
\[ \sum_{i=1}^{n}d[i]=2(n-1) \Rightarrow \sum_{i=1}^{n}(d[i]-2)<0 \]
满足上式的即为树,否则为基环树。

代码

#include <iostream>
#include <cstdio>
#include <map>
#define N 500002
#define int long long
using namespace std;
int head[N],ver[N*2],nxt[N*2],d[N],l;
int n,i,num,maxx,sum,ans,key[N];
bool vis[N];
map<int,int> val;
int read()
{char c=getchar();int w=0;while(c<'0'||c>'9') c=getchar();while(c<='9'&&c>='0'){w=w*10+c-'0';c=getchar();}return w;
}
void insert(int x,int y)
{l++;ver[l]=y;nxt[l]=head[x];head[x]=l;d[y]++;
}
void dfs(int x)
{vis[x]=1;maxx=max(maxx,key[x]);sum+=d[x]-2;ans+=(d[x]-1)*key[x];for(int i=head[x];i;i=nxt[i]){int y=ver[i];if(!vis[y]) dfs(y);}
}
signed main()
{n=read();for(i=1;i<=n;i++){int a,b;a=read();b=read();if(!val[a]){val[a]=++num;key[num]=a;}if(!val[b]){val[b]=++num;key[num]=b;}a=val[a];b=val[b];insert(a,b);insert(b,a);}for(i=1;i<=num;i++){if(!vis[i]){maxx=sum=0;dfs(i);if(sum<0) ans+=maxx;}}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/LSlzf/p/11182681.html

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

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

相关文章

Zookeeper环境安装

源码包下载&#xff1a; http://archive.apache.org/dist/zookeeper/zookeeper-3.4.10 集群环境&#xff1a; master 192.168.1.99 slave1 192.168.1.100 slave2 192.168.1.101 下载安装包&#xff1a; # Mater wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.1…

鸿蒙系统用没有安卓的代码,套壳?不存在!纯鸿蒙系统不含任何安卓代码,其他手机厂商可使用...

众所周知&#xff0c;华为的鸿蒙系统已经应用于许多华为机型上&#xff0c;例如Mate40、MataX2等&#xff0c;同时不少家电厂商也和华为合作推出了基于鸿蒙的终端设备&#xff0c;比如美的、老板等。那么&#xff0c;和华为处于竞争关系的手机厂商可以使用鸿蒙系统吗&#xff1…

出来乍到

第一篇&#xff0c;还没想到写什么东西&#xff0c;比空的好&#xff0c;先这么挂一下把。转载于:https://www.cnblogs.com/Carlwave/archive/2006/01/24/322413.html

Java消息队列总结只需一篇解决ActiveMQ、RabbitMQ、ZeroMQ、Kafka

一、消息队列概述 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ&#xff0c;RabbitM…

一种快速统计SQL Server每个表行数的方法

我们都知道用聚合函数count()可以统计表的行数。如果需要统计数据库每个表各自的行数(DBA可能有这种需求)&#xff0c;用count()函数就必须为每个表生成一个动态SQL语句并执行&#xff0c;才能得到结果。以前在互联网上看到有一种很好的解决方法&#xff0c;忘记出处了&#xf…

android 小黄车首页,android采用MVP漫画APP、适配刘海屏、小黄车主界面、录音波浪动画、综合APP等源码...

Android精选源码Android优质博客为什么组件化 随着移动互联网的发展&#xff0c;或许中小型项目还可以用单工程MVC/MVP/MVVM的架构来完成&#xff0c;但当项目到了一定程度之后&#xff0c;编译时间 原来越长&#xff0c;测试或者开发任何一个模块功能都需要整个项目重启运行。…

[HEOI2012]采花

题目描述 萧薰儿是古国的公主&#xff0c;平时的一大爱好是采花。 今天天气晴朗&#xff0c;阳光明媚&#xff0c;公主清晨便去了皇宫中新建的花园采花。 花园足够大&#xff0c;容纳了n朵花&#xff0c;花有c种颜色&#xff08;用整数1-c表示&#xff09;&#xff0c;且花是排…

修改SQL server数据库中的逻辑文件名

使用 FILE_NAME 函数可以返回给定文件标识 (ID) 号的逻辑文件名如下 下例返回 file_ID 为 1 的文件名&#xff08;master 数据库文件&#xff09;。 1USEmaster2SELECTFILE_NAME(1)当我们进行从一个备份中还原数据库时&#xff0c;数据库的逻辑文件名是不会改变的。 可用 ALTER…

java根据模板生成PDF

首先你的制作一个pdf模板&#xff1a; 1.先用word做出模板界面 画单元格的时候需要考虑值的长度&#xff0c;像这里的状态可能会很长 2.文件另存为pdf格式文件 使用福昕PDF 打开&#xff0c;添加文本&#xff0c;以及需要添加值的地方&#xff0c;设置文本域&#xff0c;这个就…

android bilibili搜索框,仿bilibili搜索框效果(三句代码实现)

SearchDialog仿bilibili搜索框效果(只需要三句话即可实现)先看预览图(转换后有一点点失真):前言1,支持搜索历史(已经做了数据库存储了)2,基本与bilibili的搜索效果差不多了3,需要修改更多内容可以下载library自己修改4,本人非大牛,有不妥之处请Issues指出,谢谢5,参考了该po的文…

元璟资本陈洪亮解析人货场融合 消费者变成“合作者”

一年一度的云栖大会是新科技大放异彩的舞台&#xff0c;而创业者们同样聚集于此&#xff0c;探讨前沿的商业模式。 在今日举行的“云栖大会 - 阿里云创新中心年度盛典”上&#xff0c;元璟资本合伙人陈洪亮发表演讲&#xff0c;他从新消费和新零售的诸多创新现象出发&#xff0…

通用数据库显示程序

数据库显示程序,能调任意库,任意字段,多关键字搜索,自动分页. 阿余经常写一些数据库相关的程序,当然离不开显示库中的数据了,说实话,做这样的程序真是无聊啊,所以,阿余就想写个函数,一个通用的数据库显示函数.要求如下: 1. 能显示指定的字段,当然,字段名和显示的文字可以不一样…

2019.8.13 sdfzoier

lxy: lixf acwing上的118,126 zhangtingyu zhaosirui wujialin 转载于:https://www.cnblogs.com/caterpillor/p/11186047.html

鸿蒙 电视盒子,目前最强的电视盒子:性价比最高的5款电视盒子

电视盒子作为目前人们满足精神生活的一个电子产品&#xff0c;产品的质量自然是要有很高的保证&#xff0c;并且要有较好的使用体验&#xff0c;在产品价格上也要让消费者感到实惠&#xff0c;以上这些要求也是我们所说的性价比&#xff0c;性价比最高的盒子&#xff0c;也足以…

CDH-5.7.0:基于Parcels方式离线安装配置

http://shiyanjun.cn/archives/1728.html https://www.waitig.com/cdh%E5%AE%89%E8%A3%85.html

From 7.8 To 7.14

From 7.8 To 7.14 大纲 学科 英语的话每天早上背单词, 争取每天做一篇完型, 一篇阅读, 一篇短文填空, 一篇改错, 一篇七选五??? 似乎太多了, 先试一下吧 语文的话, 尝试翻译一下文言文??? 理科先不管他 竞赛 考试, 题解, 做题, 恩, 应该差不多吧 7.12 考试, 改题... 今天…

html邮箱地址的正则表达式,javascript写一个校验邮箱的正则表达式

test判断字符串是否符合正则的要求注意注意&#xff1a;字符串有一部分符合要求&#xff0c;test就会判断为真。这个时候我们可以加一个行首(^)行尾($)来控制分析我们根据常用邮箱写一个中文的校验规则如下&#xff1a;我们常用的邮箱格式&#xff1a;yancamy126.comyan233__qq…

系统需求分析文档需要考虑的问题

最近作了几次需求分析,有了一些经验,特共享出来.欢迎指正.我认为在系统需求分析中,有三个问题需要注意,即系统涵盖范围用户对上线时间的要求系统上线对目前系统整体的影响系统覆盖的范围很多用户都想的是,这次一定要把所有遇到的问题解决完. 也就说,客户潜在的心理是对系统较高…

洛谷 P1414 又是毕业季II (多个数的最大公因数)

这道题其实不难&#xff0c;但是我想复杂了 我想的是把每个数质因数分解&#xff0c;然后每次就枚举每个质因数 来求最小公倍数。 然后想了想这样复杂度将会非常的大&#xff0c;肯定超时 然后看了题解发现不需要质因数分解&#xff0c;直接存因数的个数就好了 c[i]表示i这个因…

前端之CSS

什么是CSS&#xff1f; 在标签上设置标签的style属性。 编写CSS的方法 一、直接在标签中写style属性。 二、在head标签中写style标签&#xff0c;这里就需要选择器选择所需的标签 1、id选择器&#xff0c;以#开头&#xff0c;例子如下&#xff1a; <!DOCTYPE html> <h…