【BZOJ2044】三维导弹拦截 DP+(有上下界的)网络流
【BZOJ2044】三维导弹拦截
Description
Input
Output
Sample Input
0 0 0
1 1 0
1 1 1
2 2 2
Sample Output
2
HINT
所有的坐标都是[0,10^6]的整数
对于30%的数据满足N < 31
对于50%的数据满足N < 101
对于100%的数据满足N < 1001
题解:第一问暴力DP即可,下面考虑第二问。
这题本质上是求最小路径覆盖,所以可以用有上下界的网络流(最小流)解决。这里不说如何建最小流了。不过,由于本题的特殊性质,最小流的第一次dinic一定是满流的,所以我们可以直接进行第二次dinic。第二次的建图方法如下:
1.S -> i 容量1
2.i' -> T 容量1
3.i' -> i 容量1
4.对于边<i,j> i-> j' 容量1
n-最大流即是答案。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int n,ans1,ans2,cnt,S,T;
struct node
{
int x,y,z;
}p[1010];
int f[1010],to[2000010],next[2000010],val[2000010],head[2010],d[2010];
queue<int> q;
bool cmp(const node &a,const node &b)
{
return a.x<b.x;
}
int dfs(int x,int mf)
{
if(x==T) return mf;
int i,k,temp=mf;
for(i=head[x];i!=-1;i=next[i])
{
if(d[to[i]]==d[x]+1&&val[i])
{
k=dfs(to[i],min(temp,val[i]));
if(!k) d[to[i]]=0;
val[i]-=k,val[i^1]+=k,temp-=k;
if(!temp) break;
}
}
return mf-temp;
}
int bfs()
{
while(!q.empty()) q.pop();
memset(d,0,sizeof(d));
int i,u;
q.push(S),d[S]=1;
while(!q.empty())
{
u=q.front(),q.pop();
for(i=head[u];i!=-1;i=next[i])
{
if(!d[to[i]]&&val[i])
{
d[to[i]]=d[u]+1;
if(to[i]==T) return 1;
q.push(to[i]);
}
}
}
return 0;
}
inline void add(int a,int b,int c)
{
to[cnt]=b,val[cnt]=c,next[cnt]=head[a],head[a]=cnt++;
to[cnt]=a,val[cnt]=0,next[cnt]=head[b],head[b]=cnt++;
}
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
int main()
{
n=rd(),S=0,T=2*n+1;
int i,j;
for(i=1;i<=n;i++) p[i].x=rd(),p[i].y=rd(),p[i].z=rd();
sort(p+1,p+n+1,cmp);
memset(head,-1,sizeof(head));
for(i=1;i<=n;i++)
{
f[i]=1,add(S,i,1),add(i+n,i,1),add(i+n,T,1);
for(j=1;j<i;j++) if(p[j].x<p[i].x&&p[j].y<p[i].y&&p[j].z<p[i].z)
f[i]=max(f[i],f[j]+1),add(j,i+n,1);
ans1=max(ans1,f[i]);
}
printf("%d\n",ans1);
while(bfs())
ans2+=dfs(S,1<<30);
printf("%d",n-ans2);
return 0;
}
【BZOJ2044】三维导弹拦截 DP+(有上下界的)网络流的更多相关文章
- [bzoj2044] 三维导弹拦截 (二分图最大匹配+dp)
传送门 Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利! ...
- bzoj2044: 三维导弹拦截
Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利!当然,A ...
- 【bzoj2044】三维导弹拦截 dp+二分图最大匹配
题目描述 n个物品,第i个位置有ai.bi.ci三种属性.每次可以选出满足$\ a_{p_i}<a_{p_{i+1}}\ ,\ b_{p_i}<b_{p_{i+1}}\ ,\ c_{p_i ...
- ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)
//有流量上下界的网络流 //Time:47Ms Memory:1788K #include<iostream> #include<cstring> #include<c ...
- SGU 194. Reactor Cooling(无源汇有上下界的网络流)
时间限制:0.5s 空间限制:6M 题意: 显然就是求一个无源汇有上下界的网络流的可行流的问题 Solution: 没什么好说的,直接判定可行流,输出就好了 code /* 无汇源有上下界的网络流 * ...
- 【ZOJ2314】Reactor Cooling(有上下界的网络流)
前言 话说有上下界的网络流好像全机房就我一个人会手动滑稽,当然这是不可能的 Solution 其实这道题目就是一道板子题,主要讲解一下怎么做无源无汇的上下界最大流: 算法步骤 1.将每条边转换成0~u ...
- ZOJ 2314 有上下界的网络流
problemCode=2314">点击打开链接 题意:给定m条边和n个节点.每条边最少的流量和最多的流量.保证每一个节点的出入流量和相等,问能够形成吗,能够则输出每条边的流量 思路: ...
- poj_2396 有上下界的网络流
题目大意 一个mxn的矩阵,给出矩阵中每一行的和sh[1,2...m]以及每一列的数字的和目sv[1,2...n],以及矩阵中的一些元素的范围限制,比如a[1][2] > 1, a[2][3] ...
- 【BZOJ2502】清理雪道 有上下界的网络流 最小流
[BZOJ2502]清理雪道 Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降 ...
随机推荐
- 读取Properties配置文件, 四种方式都可以得到webroot/WEB-INF/classes这个路径
下面四种方式都可以得到webroot/WEB-INF/classes这个路径,有什么区别,哪种方式最好? String path = this.getClass().getResource(" ...
- oracle 数据库 基础操作
一.oracle基本常用的数据类型 varchar(长度) 字符串 char(长度) 字符 number(x,y) x表示总位数 y表示保留小数点后几位数 eg面试题:number(5,3)最大的数是 ...
- 设计模式:工厂方法模式(Python)
来自:http://blog.csdn.net/ericzhong83/article/details/7604728 工厂方法模式(Factory Method Pattern): 定义了一个创建对 ...
- Visual Studio C++ MFC界面常用参数更改(改变图标,添加控件,调试打印函数等等)
背景 需要使用Visual Studio C++做一些界面.此篇文章既是记录Visual Studio C++在调整界面时常常遇见的问题. 正文 一.如何更改窗体图标,以及生成的.exe图标 更改窗体 ...
- 豆瓣电台笔记3:cell添加从中间向两侧放大的动画
步骤: 1.设置动画属性的初始值 cell.layer.transform = CATransform3DMakeScale(0.1,0.1,1) 2.在指定时间内执行动画 UIView.animat ...
- Eclipse3.4以上使用dropins的插件安装方式
Eclipse3.4以上版本支持使用dropins的插件安装方式,使用方便,共有四种使用方法: 1. 最简单的,直接将jar包放到dropins目录下eclipse/ dropins/ 2. 传 ...
- ActivityGroup window bad token问题深入分析
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 ActivityGroup window bad token问题深入分析 近期帮别人调试一个webview ...
- MTU的概念,什么是路径MTU? MTU发现机制,TraceRoute(了解)
1.MTU的概念 MTU即Maximum Transmission Unit 最大传输单元.它是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位). 2.路径MTU ...
- tony_nginx的安装和配置
yum安装nginx Centos默认的yum源里没有nginx,需要手动添加源,有两种方法: 使用nginx提供的一个源设置安装包 nginx下载页面:http://nginx.org/en/dow ...
- 利用python批量缩放图片
废话少说,上代码: import matplotlib as mpl mpl.use('Agg') import os import matplotlib.pyplot as plt from sci ...