[BZOJ] 2044: 三维导弹拦截
排序去掉一维,剩下两维可以直接\(O(n^2)\)做,也可以用二维树状数组(但是不方便建边),解决第一问
第二问,按转移顺序连边,建出DAG,求最小不可重链覆盖即可
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
inline int rd(){
int ret=0,f=1;char c;
while(c=getchar(),!isdigit(c))f=c=='-'?-1:1;
while(isdigit(c))ret=ret*10+c-'0',c=getchar();
return ret*f;
}
#define space() putchar(' ')
#define nextline() putchar('\n')
void pot(int x){if(!x)return;pot(x/10);putchar('0'+x%10);}
void out(int x){if(!x)putchar('0');if(x<0)putchar('-'),x=-x;pot(x);}
const int MAXN = 2005;
const int INF = 1<<30;
int n;
struct Node{
int x,y,z;
Node(int a=0,int b=0,int c=0){x=a;y=b;z=c;}
bool operator <(const Node &rhs)const{
return x<rhs.x;
}
}node[MAXN];
int f[MAXN];
int ans1,ans2;
int nex[MAXN*MAXN],to[MAXN*MAXN],fl[MAXN*MAXN];
int head[MAXN],ecnt=1;
inline void adds(int x,int y,int f){
nex[++ecnt]=head[x];to[ecnt]=y;
fl[ecnt]=f;head[x]=ecnt;
}
inline void add(int x,int y,int f){
adds(x,y,f);adds(y,x,0);
}
int dep[MAXN];
queue<int> Q;
bool bfs(int s,int t){
memset(dep,0,sizeof(dep));
Q.push(s);dep[s]=1;
while(!Q.empty()){
int top=Q.front();Q.pop();
for(int i=head[top];i;i=nex[i]){
int v=to[i];
if(dep[v]||fl[i]==0) continue;
dep[v]=dep[top]+1;
Q.push(v);
}
}
return dep[t];
}
int cur[MAXN];
int dfs(int x,int flow,int t){
if(x==t) return flow;
int tmp,used=0;
for(int &i=cur[x];i;i=nex[i]){
int v=to[i];
if(dep[v]!=dep[x]+1)continue;
tmp=dfs(v,min(flow-used,fl[i]),t);
used+=tmp;fl[i]-=tmp;fl[i^1]+=tmp;
if(used==flow) return flow;
}
if(!used) dep[x]=-1;
return used;
}
int dinic(int s,int t){
int ret=0;
while(bfs(s,t)){
memcpy(cur,head,sizeof(head));
ret+=dfs(s,INF,t);
}
return ret;
}
int main(){
n=rd();
int S=n+n+1,T=n+n+2;
int x,y,z;
for(int i=1;i<=n;i++){
x=rd();y=rd();z=rd();
node[i]=Node(x,y,z);
}
sort(node+1,node+1+n);
for(int i=1;i<=n;i++){
f[i]=1;
add(S,i,1);add(i+n,T,1);
for(int j=1;j<i;j++){
if(node[j].x==node[i].x||node[j].y>=node[i].y||node[j].z>=node[i].z)continue;
f[i]=max(f[i],f[j]+1);
add(j,i+n,1);
}
ans1=max(ans1,f[i]);
}
ans2=n-dinic(S,T);
out(ans1);nextline();
out(ans2);
return 0;
}
[BZOJ] 2044: 三维导弹拦截的更多相关文章
- bzoj 2044 三维导弹拦截——DAG最小路径覆盖(二分图)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2044 还以为是CDQ.发现自己不会三维以上的…… 第一问可以n^2.然后是求最长不下降子序列 ...
- bzoj 2044 三维导弹拦截 —— 最小路径覆盖
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2044 第一问暴力 n^2 即可: 注意这道题对位置没要求!所以先按第一维排序一下即可: 然后 ...
- 【BZOJ2044】三维导弹拦截 DP+(有上下界的)网络流
[BZOJ2044]三维导弹拦截 Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指 ...
- bzoj2044: 三维导弹拦截
Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利!当然,A ...
- [bzoj2044] 三维导弹拦截 (二分图最大匹配+dp)
传送门 Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭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 ...
- 2020.10.17 JZOJ 提高B组T2 导弹拦截
2020.10.17 JZOJ 提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 敌国的导弹形成了立体打击,每个导弹可以抽象成一个三维空间中的 ...
- HDU-1257 导弹拦截系统 http://acm.hdu.edu.cn/showproblem.php?pid=1257
Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高 ...
- AC日记——导弹拦截 洛谷 P1020 (dp+模拟)
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
随机推荐
- POJ 2068 NIm (dp博弈,每个人都有特定的取最大值)
题目大意: 有2n个人,从0开始编号,按编号奇偶分为两队,循环轮流取一堆有m个石子的石堆,偶数队先手,每个人至少取1个,至多取w[i]个,取走最后一个石子的队伍输.问偶数队是否能赢. 分析: 题目数据 ...
- 73th LeetCode Weekly Contest Domino and Tromino Tiling
We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape. These shapes may ...
- lifecycle-mapping-metadata.xml
<?xml version="1.0" encoding="UTF-8"?> <lifecycleMappingMetadata> &l ...
- UnityError 打包到Android错误解决
- HBase 相关API操练(二):Java API
一.HBase Java编程 (1)HBase是用Java语言编写的,它支持Java编程: (2)HBase支持CRUD操作:Create,Read,Update和Delete: (3)Java AP ...
- angularjs $state.go页面不刷新数据
假如进入market/beian/add添加数据,保存提交后回退market/beian列表页,没有自动更新数据,必须得手动下拉刷新才会出来 $state.go("marketBeian&q ...
- ElasticSearch java API-使用More like this实现基于内容的推荐
ElasticSearch java API-使用More like this实现基于内容的推荐 基于内容的推荐通常是给定一篇文档信息,然后给用户推荐与该文档相识的文档.Lucene的api中有实现查 ...
- NGSL + NAWL 单词表 以及学习网站
https://quizlet.com/44769538/nawl-1-1-50-flash-cards/ NAWL 网站 NAWL 单词表 + NGSL 单词表 http://www.newgen ...
- 前端JS电商放大镜效果
前端JS电商放大镜效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- addin修改启动路径