[洛谷P2711]小行星
题目大意:有$n$颗行星,每颗行星的位置是$(x,y,z)$。每次可以消除一个面(即$x,y$或$z$坐标相等)的行星,求消除这些行星的最少次数。
题解:最小割,对于每一颗小行星,从 x 面的出点向 y 面的入点连一条容量为 inf 的边(仅为保证点之间的连通性),从 y 面的出点向 z 面的入点连容量为 inf 的边。再从超级源向每个 x 面的入点连容量为 inf 的边,
从每个 z 面的出点向超级汇连容量为 inf 的边。可以简化为从超级源 S 向每个 x 连一条权值为 1 的边。从 z 面的边到终点同理
C++ Code:
#include<cstdio>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f;
int st,ed;
int q[2500],h,t,d[2500];
int head[2500],cnt=2;
struct Edge{
int to,nxt,w;
}e[500000];
int n;
inline int min(int a,int b){return a<b?a:b;}
void add(int a,int b,int c){
e[cnt]=(Edge){b,head[a],c};head[a]=cnt;
e[cnt^1]=(Edge){a,head[b],0};head[b]=cnt^1;
cnt+=2;
}
bool bfs(){
memset(d,0,sizeof d);
d[q[h=t=1]=st]=1;
while (h<=t){
int x=q[h++];if (x==ed)return true;
for (int i=head[x];i;i=e[i].nxt){
int to=e[i].to;
if (e[i].w&&!d[to]){
d[to]=d[x]+1;
q[++t]=to;
}
}
}
return d[ed];
}
int dfs(int x,int low){
if (x==ed||!low)return low;
int res=0,w;
for (int i=head[x];i;i=e[i].nxt){
int to=e[i].to;
if (d[to]==d[x]+1&&e[i].w){
w=dfs(to,min(low-res,e[i].w));
e[i].w-=w;
e[i^1].w+=w;
res+=w;
if (res==low)return res;
}
}
if (!res)d[x]=-1;
return res;
}
void dinic(){
int ans=0;
while (bfs())ans+=dfs(st,inf);
printf("%d\n",ans);
}
int main(){
scanf("%d",&n);
st=0,ed=2001;
for (int i=0;i<n;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y+500,inf);
add(y+500,y+1000,1);add(y+1000,z+1500,inf);
}
for (int i=1;i<=500;i++)add(st,i,1),add(i+1500,ed,1);
dinic();
return 0;
}
[洛谷P2711]小行星的更多相关文章
- AC日记——小行星 洛谷 P2711
题目背景 pid=3437 题目描述 星云中有n颗行星,每颗行星的位置是(x,y,z).每次可以消除一个面(即x,y或z坐标相等)的行星,但是由于时间有限,求消除这些行星的最少次数. 输入输出格式 输 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
随机推荐
- PHP 十问
1.为了保证精度,Mysql中存钱数的字段用什么类型?PHP怎么处理浮点数精度 decimal数据类型来存储钱: 浮点数的精度有限.尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由 ...
- Python接受流式输入
随笔记录——Python接受终端入若干行输入 Python接受终端的若干行输入时,比较常用的input()不再好用. 1. 导入sys模块: import sys 2. for循环接受输入: for ...
- Python实现多属性排序
Python实现多属性排序 多属性排序:假如某对象有n个属性,那么先按某规则对属性a进行排序,在属性a相等的情况下再按某规则对属性b进行排序,以此类推. 现有对象Student: class Stud ...
- hive-show-partitions
展示分区命令 show partitions show partitions 可以展示这个表格之下的所有分区信息.这个命令常常用在使用SQL语句操作数据之前.举个简单的例子,如果我们想要根据uid融合 ...
- python基础,导入模块,if语句,while语句
python基础 python代码 变为字节码 变为机器码 最后执行执行‘文件名.py’文件时出现的‘文件名.pyc’文件为字节码 缓存机制 使用pycharm的时候在文件最开始添加下面这两行代码,中 ...
- Python3乘法口诀表(由上至下+由下至上)
一.所用知识点: 1.变量的使用. 2.循环语句的使用,这里用到的是双while循环.当然,使用其他的循环去做也是可以的.我认为,对于刚刚接触编程的人来说,使用双while循环比较容易理解. 3.使用 ...
- Go语言获取本地IP地址
最近要做一个向局域网内的所有设备广播发送信息,并接受设备的回复信息,回复信息包括设备的版本号,IP地址,运行工程名等信息.发现一个局域网内是可以有不同的网段的,但UDP广播只能是同一个网段的广播.又发 ...
- P1396 营救(最小瓶颈路)
题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门…… 妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小 ...
- P2153 [SDOI2009]晨跑(最小费用最大流)
题目描述 Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街 ...
- Spring 的好处?
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监 ...