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条边,所以有
\]
满足上式的即为树,否则为基环树。
代码
#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;
}
Codeforces 892E Envy的更多相关文章
- Codeforces 891C Envy
Envy 感觉这种最小生成树上的啥题都差不多的解法.. #include<bits/stdc++.h> #define LL long long #define fi first #def ...
- Codeforces 891C Envy(MST + 并查集的撤销)
题目链接 Envy 题意 给出一个连通的无向图和若干询问.每个询问为一个边集.求是否存在某一棵原图的最小生成树包含了这个边集. 考虑$kruskal$的整个过程, 当前面$k$条边已经完成操作的时 ...
- codeforces 892E(离散化+可撤销并查集)
题意 给出一个n个点m条边的无向联通图(n,m<=5e5),有q(q<=5e5)个询问 每个询问询问一个边集{Ei},回答这些边能否在同一个最小生成树中 分析 要知道一个性质,就是权值不同 ...
- CodeForces - 891C: Envy(可撤销的并查集&最小生成树)
For a connected undirected weighted graph G, MST (minimum spanning tree) is a subgraph of G that con ...
- Codeforces 891 C Envy
题目大意 给定一个 $n$ 个点 $m$ 条边的连通的无向图,每条边有一个权值,可能有重边.给出 $q$ 组询问,一组询问给出 $k$ 条边,问是否存在一棵最小生成树包含这 $k$ 条边. 思路 这道 ...
- Codeforces Round #446 (Div. 2)
Codeforces Round #446 (Div. 2) 总体:rating涨了好多,虽然有部分是靠和一些大佬(例如redbag和ShichengXiao)交流的--希望下次能自己做出来2333 ...
- 【CF891C】Envy(最小生成树)
[CF891C]Envy(最小生成树) 题面 Codeforces 洛谷 题解 考虑\(MST\)的构建过程,对于所有权值相同的边一起考虑. 显然最终他们连出来的结果是固定的. 把连边改为把联通块联通 ...
- Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) F. Souvenirs 线段树套set
F. Souvenirs 题目连接: http://codeforces.com/contest/765/problem/F Description Artsem is on vacation and ...
- 代码的坏味道(18)——依恋情结(Feature Envy)
坏味道--依恋情结(Feature Envy) 特征 一个函数访问其它对象的数据比访问自己的数据更多. 问题原因 这种气味可能发生在字段移动到数据类之后.如果是这种情况,你可能想将数据类的操作移动到这 ...
随机推荐
- sysf接口的函数【转】
本文转载自:http://blog.csdn.net/manshq163com/article/details/7848714 说道sysfs接口,就不得不提到函数宏 DEVICE_ATTR,原型是 ...
- Hypermesh中弹簧单元设置
1D >> springs 单元类型 CBUSH1D 单元属性 PBUSH1D
- SQL优化案例
8月9日对数据库进行优化 每日22:00开始跑批 经过优化,跑批时间缩短 逻辑读对比: 20180808逻辑读 20180809逻辑读 优化前后CPU负载对比:
- 1 基础架构:一条sql查询语句如何执行?
1 基础架构:一条sql查询语句如何执行? 分析一个最简单的查询 mysql> select * from T where ID=10: MySQL基本架构示意图 大体来说,mysql可以分为s ...
- js-url操作记录
禁用回退&开启回退 // 必须声明方法 否则无法删除此监听器 function backCommon() { history.pushState(null, null, document.UR ...
- Java ——日期时间 日期时间相关类 随机数 定义类属性时建议使用引用数据类型
本节重点思维导图 Date对象创建 两个构造函数: Date() ----使用当前日期和时间来初始化对象 Date(long millisec) -----接收一个参数,该参数是从1970年1月1日起 ...
- GMS认证测试FQA
---摘要 本文档用于收录GMS认证测试的异常问题,提供一般性指导.对于本文档中未提供解答的问题请咨询@开发经理或@领域技术专家 cts测试工具如何获取? A:见Google官网 https://so ...
- fiddler之简单的接口性能测试
在针对某一个/某一些接口,发送相同的请求,不考虑参数的变化时,可以使用fiddler进行简单的性能测试.(使用功能为:replay) 一.replay功能调用 (1.Reissue Requests: ...
- react-redux --》react中 最好用的状态管理方式
一.Redux与组件 react-redux是一个第三方插件使我们在react上更方便的来使用redux这个数据架构 React-Redux提供connect方法,用于从UI组件生成容器组件,conn ...
- 20191105 《Spring5高级编程》笔记-第10章
第10章 使用类型转换和格式化进行验证 在应用程序开发中,数据验证通常与转换和格式化一起被提及.因为数据源的格式很可能与应用程序中所使用的格式不同. 名词缩写: SPI(Service Provide ...