暂无链接

叠盒子

【问题描述】

企鹅豆豆家里有很多空盒子,非常占地方。每个盒子的长和宽分别为 Li,Wi,一个盒 子可以放入一个长和宽都不小于它的盒子(可以不断嵌套),注意盒子不能够旋转,Li有可能小于 Wi。嵌套完后盒子的占地面积是最外面盒子的占地面积之和。豆豆想知道最终最小的占地面积是多少?

【输入格式】

第一行一个数 N 表示盒子的个数。
接下来 N 行,每行两个正整数,表示每个盒子的长度和宽度。

【输出格式】

一行一个整数表示最终最小的占地面积。

【输入样例】

3
1 1
1 2
2 1

【输出样例】

4

【数据范围】

对于 30%的数据,N≤10;
另外 10%的数据,Li=1;
另外 10%的数据,Li≤2;
对于 100%的数据,1≤N,Li,Wi≤200;

题解

考场上各位大佬网络流一眼秒,各种套路,只有没做过最小路径覆盖的蒟蒻瑟瑟发抖。本来觉得这个盒子一层层缩小的操作和水流挺像的,一直在想怎么把盒子大小当成流量放在边上,建一波图,又不会限制每个盒子只能用一次。然后出题人出给暴力的数据还少了一个点,实际上只有25%25%25\%的暴力分。。。

其实对于盒子的限制是通过流量来的,源点向每个盒子连流量为111的边。为了处理盒子间的嵌套,需要拆点,我们把每个盒子拆成出点和入点,每个盒子的入点向它能套住的盒子的出点连边。最后每个盒子再向汇点连容量为1" role="presentation" style="position: relative;">111,费用为盒子大小的边,样例建图如下:

这样,最后流到汇点的最大流的费用就是被套住的盒子的面积,我们用总面积减掉费用得到了答案。

代码
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
const int M=405;
struct sd{int to,fl,val;}ed[M*M*5];
int x[M],y[M],ru[M],chu[M],minf[M],dis[M],pre[M],tot,id,ans,n,top;
bool vis[M];
vector<int>mmp[M];
queue<int>dui;
void in()
{scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d%d",&x[i],&y[i]);
}
void add(int f,int t,int fl,int val)
{mmp[f].push_back(id);ed[id++]=(sd){t,fl,val};mmp[t].push_back(id);ed[id++]=(sd){f,0,-val};
}
void build()
{for(int i=1;i<=n;++i){bool flag=1;for(int j=i+1;j<=n;++j)if(x[i]==x[j]&&y[i]==y[j]){flag=0;break;}if(flag)x[++top]=x[i],y[top]=y[i];}n=top;for(int i=1;i<=n;++i)ru[i]=++tot,chu[i]=++tot;for(int i=1;i<=n;++i)for(int j=1;j<=n;++j){if(i==j)continue;if(x[i]>=x[j]&&y[i]>=y[j])add(ru[i],chu[j],inf,0);}for(int i=1;i<=n;++i)add(0,ru[i],1,0),add(chu[i],tot+1,1,-x[i]*y[i]),ans+=x[i]*y[i];
}
bool spfa(int s,int t)
{fill(dis+1,dis+2+tot,inf);memset(vis,0,sizeof(vis));dui.push(s);vis[s]=1;minf[s]=inf;int f,to,fl,val,hh;while(!dui.empty()){f=dui.front(),dui.pop(),vis[f]=0;for(int i=mmp[f].size()-1;i>=0;--i){hh=mmp[f][i],to=ed[hh].to,fl=ed[hh].fl,val=ed[hh].val;if(fl>0&&dis[to]>dis[f]+val){dis[to]=dis[f]+val,minf[to]=min(minf[f],fl),pre[to]=hh;if(!vis[to])dui.push(to),vis[to]=1;}}}return dis[t]!=inf;
}
void up(int s,int t)
{int v=t,hh;while(v!=s)hh=pre[v],ed[hh].fl-=minf[t],ed[hh^1].fl+=minf[t],v=ed[hh^1].to;ans+=minf[t]*dis[t];
}
void ac()
{build();while(spfa(0,tot+1))up(0,tot+1);printf("%d",ans);
}
int main(){in();ac();}

[2018.07.10 T1]叠盒子相关推荐

  1. 书籍 - 2018.07.10

    90%的程序员,这些基础知识都没学好 基础的东西,就算过了很长时间依然通用,知识如此,书籍亦如此.因此书籍不一定要求新,有些书籍虽然出版很久了,但依旧经典. 学习编程,最主要的还是基础,基础学好了,才 ...

  2. 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H)

    目录 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H) 竞赛事件相关 竞赛链接 竞赛题目 总结 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H) 竞赛事件相关 竞赛 ...

  3. 2018.07.19 仿优酷网页小项目

    时间:2018.07.19 大一下学期暑假 地点:成都-实习 项目类型:HTML+CSS仿优酷网页 制作时间:两天 网页源码: <!doctype html> <html> & ...

  4. 网吧服务器全部进不了系统,2018.07.12某网吧因为服务器系统盘健康度导致全体卡死重启的故障分析处理过程...

    原标题:2018.07.12某网吧因为服务器系统盘健康度导致全体卡死重启的故障分析处理过程 导读: 天晚上20:54接到某网吧电话,说整个网吧大部分电脑自动重启了,而且进不去系统了.立即用电脑远程登录 ...

  5. 计算机网络部分(共44题),2018年10月自考04741计算机网络原理试卷及答案

    2018年10月高等教育自学考试全国统一命题考试 计算机网络原理 试卷 (课程代码04741) 本试卷共5页,满分l00分,考试时间l50分钟. 考生答题注意事项: 1.本卷所有试题必须在答题卡上作答 ...

  6. 十月 android版本分布,安兔兔发布2018年10月份Android手机性能排行榜

    汽车行业有金九银十一说,手机行业同样也是如此.在刚刚过去的 10 月份,我们见证了多款国产旗舰手机的发布,包括Mate20 系列.小米MIX3.荣耀Mgaic 2.努比亚X等等,得益于强大的硬件配置, ...

  7. 2018.07.30 巴别时代

    * 项目部署更新 用符号链接 project => project1, project2 ln -s project2 project * composer自动加载机制 namespace =& ...

  8. windows变量延迟_Windows 10的2018年10月更新可能推迟到11月(这就是原因)

    windows变量延迟 Microsoft stopped offering Windows 10's October 2018 Update on October 6, as it was dele ...

  9. ssl初一组周六模拟赛【2018.3.10】

    前言 先说一下成绩(因某人要求去掉了某人): 姓名 成绩 xjq 280 wyc 200(本人) lrz 200 zyc 100 hjq 40 lw 30 hzb 0 正题 题目1:Clocest ( ...

  10. 2018年10月17日普级B组【模拟赛】

    2018年10月17日普级B组模拟赛2018年10月17日普级B组模拟赛2018年10月17日普级B组模拟赛 第一题--ISBN号码第一题--ISBN号码第一题--ISBN号码 博客链接: https ...

最新文章

  1. Codechef_JULY14
  2. STM32F103C8T6单片机IAP升级
  3. 学习了Redis的五大数据类型,其底层实现你了解吗?
  4. 任意进制的转换(C,C++)itoa函数,strtol函数,bitset函数,oct函数,dec函数,hex函数
  5. flex和blazeds_Java程序员学习Flex和BlazeDS的13个理由
  6. AFDX(ARINC664)的交换机规范
  7. 原生JS制作缤纷色彩板
  8. ESP32实验-自建web服务器配网01
  9. c#直接横向打印LocalReport
  10. 动作捕捉(Motion Capture)文件BVH的解读笔记
  11. Java之国际化操作
  12. DB2 的REORG_学习(2)_表重组
  13. 综述:神经网络的优化-优化器,动量,自适应学习率,批量归一化
  14. stm32+hx711+蓝牙hc05 称重系统(蓝牙电子秤)
  15. 如何成为优秀计算机学者 - 高文老师
  16. ICMAX告诉你除了BGA、SOP,还有那些主流的封装类型?
  17. 文件夹隐藏精灵 v5.1 bt
  18. 2022-2027年中国智能手机维修行业发展监测及投资战略研究报告
  19. 唐宋文学诗人分布展示
  20. 电力工程师 计算机英语,电力工程师专业英语教程(部分).doc

热门文章

  1. 企业安全:业务的安全韧性
  2. Mysql更换版本的操作,非常详细(包括数据备份,卸载,安装,还原)
  3. Consul注册中心的启动方式及下载方法
  4. 不写xml的MyBatis-Plus中关联属性的查询(1对1,1对n)
  5. 数据库管理(事务、ACID、并发、封锁、可串行化、隔离)
  6. mysql5.7备份
  7. 关于stm32优先级大小的理解
  8. ui-router 之 $state.go
  9. Android使用本地广播
  10. win8.1 uefi引导