4886: [Lydsy1705月赛]叠塔游戏

Time Limit: 20 Sec  Memory Limit: 256 MB
Submit: 198  Solved: 76
[Submit][Status][Discuss]

Description

小Q正在玩一个叠塔的游戏,游戏的目标是叠出尽可能高的塔。在游戏中,一共有n张矩形卡片,其中第i张卡片的
长度为a_i,宽度为b_i。小Q需要把所有卡片按一定顺序叠成一座塔,要求对于任意一个矩形,它的长度要严格大
于它上边的任意一个矩形的长度。塔的高度为所有矩形的宽度之和。在游戏中,小Q可以将卡片翻转90度来使用,
而且必须用上全部n张卡片。请写一个程序,帮助计算小Q能叠出最高的塔的高度。

Input

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

Output

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

Sample Input

3
5 16
10 5
5 10

Sample Output

20

HINT

Source

思路:要求长度递增,求最大宽度之和。 由于排序是自己定的,所以只要求长度不相同,求最大宽度之和。 这样的话,我们就尝试用最大费用流来建图,

S向每个矩形连(1,0)(表示容量为1,费用为0)的边;     每个矩形向x连(1,y)的边,向y连(1,x)的边;     然后每个数向T连(1,0)的边。然后就是跑最大费用流。 由于数据太大,显然会超时。  这样的题一般可以贪心优化,可以对比bzoj4883,是一个套路。

此题的定向和bzoj4883的定向不一样,此题的定向会决定答案的大小。  只有无环的连通块,根的贡献=度数,其他都是=度数-1。 所以此题不需要排序,只需要找连通块的最大值即可。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int N,cnt,ma,sum,tot,a[maxn],b[maxn],fa[maxn],tag[maxn];
int val[maxn],d[maxn],mx[maxn],Laxt[maxn],To[maxn],Next[maxn];
map<int,int>idx; bool vis[maxn];ll ans;
void add(int u,int v){ d[u]++;To[++cnt]=v;Next[cnt]=Laxt[u];Laxt[u]=cnt;}
int find(int x){
if(x==fa[x]) return x;
return fa[x]=find(fa[x]);
}
int main(){
int u,v; scanf("%d",&N);
rep(i,,N){
scanf("%d%d",&u,&v);
if(!idx[u]) idx[u]=++tot,val[tot]=u;
if(!idx[v]) idx[v]=++tot,val[tot]=v;
u=idx[u]; v=idx[v]; d[u]++; d[v]++;
a[i]=u; b[i]=v;
}
rep(i,,tot) fa[i]=i,mx[i]=val[i];
rep(i,,tot){
int x=find(a[i]),y=find(b[i]);
if(tag[x]&&tag[y]) continue;
if(x==y) tag[x]=;
else fa[y]=x,tag[x]|=tag[y],mx[x]=max(mx[x],mx[y]);
}
rep(i,,tot){
ans+=(ll)(d[i]-)*val[i];
if(find(i)==i&&!tag[i]) ans+=mx[i];
}
printf("%lld",ans);
return ;
}

BZOJ4886: [Lydsy1705月赛]叠塔游戏(环套树森林&贪心)的更多相关文章

  1. BZOJ4886 [Lydsy1705月赛]叠塔游戏[基环树]

    很妙的一道题. 由于本人过于zz,不会这道题,通过厚颜无耻翻阅题解无数终于懂了这道题,所以这里转载一位神仙的blog. 没有看懂?没事,再来一篇. 这题个人认为主要在于转化题意和建图,这两点想通了应该 ...

  2. bzoj4886 [Lydsy2017年5月月赛]叠塔游戏

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4886 [题解] 跟bzoj4883:http://www.cnblogs.com/galax ...

  3. BZOJ4883: [Lydsy1705月赛]棋盘上的守卫(最小环套树森林&优化定向问题)

    4883: [Lydsy1705月赛]棋盘上的守卫 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 475  Solved: 259[Submit][St ...

  4. BZOJ 4883 [Lydsy2017年5月月赛]棋盘上的守卫(最小生成环套树森林)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4883 [题目大意] 在一个n*m的棋盘上要放置若干个守卫. 对于n行来说,每行必须恰好 ...

  5. 【bzoj4883】[Lydsy2017年5月月赛]棋盘上的守卫 最小环套树森林

    题目描述 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的,且每个位置最多只能放置一个 ...

  6. [AGC008E] Next or Nextnext [环套树森林+结论讨论]

    题面 传送门 思路 p到a 首先,本题中如果对于所有的$i$,连边$<i,p_i>$,那么可以得到一批环 那么这个题另外一点就是,可以变成连边$<i,p_{p_i}>$ 我们分 ...

  7. 题解 [BZOJ4886] 叠塔游戏

    题面 解析 这是个有趣的建图题啊. 首先我们可以发现,宽度严格递增是没什么用的. 因为实际上我们在旋转完以后, 矩形的顺序是可以随便排的. 因此只要保证宽度互不相同就行了. 然后,我们对长和宽离散化, ...

  8. BZOJ1124 POI2008枪战Maf(环套树+贪心)

    每个点出度都为1,可以发现这张图其实是个环套树森林,树中儿子指向父亲,环上边同向. 首先自环肯定是没救的,先抬出去. 要使死亡人数最多的话,显然若一个点入度为0其不会死亡,而一个孤立的环至少会留下一个 ...

  9. [BZOJ4883][Lydsy1705月赛]棋盘上的守卫(Kruskal)

    对每行每列分别建一个点,问题转为选n+m条边,并给每条边选一个点覆盖,使每个点都被覆盖.也就是最小生成环套树森林. 用和Kruskal一样的方法,将边从小到大排序,若一条边被选入后连通块仍然是一个环套 ...

随机推荐

  1. rails性能优化

    1,使用Unicorn或者Thin服务器替代默认的webrick.2,静态资源压缩合并,放到云存储上.3,同时可以使用rails的Turbolinks,使用js替换title和body,但也带来了js ...

  2. Kernel space是啥?

    今天因为查一个Java zero copy的问题,遇到了kernel space.之前是耳闻过内核空间的,但是看到kernel space不知道是啥.知道的太少,除了学习,我也做不了啥.因为自己认知有 ...

  3. U盘安装window系统

    U盘安装window系统: 1. 制作系统启动U盘,推荐使用老毛桃. 2. 电脑上插入U盘,启动系统,选择U盘启动. 3. 进入老毛桃选择界面,选择生成PE系统.推荐win8,之前在一个戴尔电脑上使用 ...

  4. JavaScript中常用的事件

    .onclick事件 点击事件(onclick并不是js中的方法,onclick只是浏览器提供js的一个dom接口,让js可以操作dom,所以onclick大小写都是没问题的,比如HTML代码就不用区 ...

  5. 微信小程序:页面配置 page.json

    微信小程序:页面配置 page.json 一.页面配置 page.json 如果整个小程序的风格是蓝色调,那么可以在 app.json 里边声明顶部颜色是蓝色即可. 实际情况可能不是这样,可能你小程序 ...

  6. 20162314 Experiment 3 - Sorting and Searching

    Experiment report of Besti course:<Program Design & Data Structures> Class: 1623 Student N ...

  7. ZLYD团队第5周项目总结

    ZLYD团队第5周项目总结 项目进展 目前游戏人没有成功运行.初步判断是部分代码有误. 我们采用了两种运行方式,代码未出现明确错误.但问题可能是由于版本问题. 将Wall.java.Gold.java ...

  8. 《Effective Java 2nd》第7章 方法

    目录 第38条 检查参数的有效性 第39条 必要时进行保护性拷贝 第40条 谨慎设计方法签名 第41条 慎用重载 第42条 慎用可变参数 第43条 返回零长度的数组或集合,而不是null 第44条 为 ...

  9. SDOI2011_染色

    SDOI_染色 背景:很早就想学习树链剖分,趁着最近有点自由安排的时间去学习一下,发现有个很重要的前置知识--线段树.(其实不一定是线段树,但是线段树应该是最常见的),和同学吐槽说树剖的剖和分都很死板 ...

  10. Docker:Err http://archive.ubuntu.com trusty InRelease & E: Unable to locate package [name] 问题

    参考: Docker containers can't resolve DNS on Ubuntu 14.04 Desktop Host Unable to locate package错误解决办法 ...