排序去掉一维,剩下两维可以直接\(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: 三维导弹拦截的更多相关文章

  1. bzoj 2044 三维导弹拦截——DAG最小路径覆盖(二分图)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2044 还以为是CDQ.发现自己不会三维以上的…… 第一问可以n^2.然后是求最长不下降子序列 ...

  2. bzoj 2044 三维导弹拦截 —— 最小路径覆盖

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2044 第一问暴力 n^2 即可: 注意这道题对位置没要求!所以先按第一维排序一下即可: 然后 ...

  3. 【BZOJ2044】三维导弹拦截 DP+(有上下界的)网络流

    [BZOJ2044]三维导弹拦截 Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指 ...

  4. bzoj2044: 三维导弹拦截

    Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利!当然,A ...

  5. [bzoj2044] 三维导弹拦截 (二分图最大匹配+dp)

    传送门 Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利! ...

  6. 【bzoj2044】三维导弹拦截 dp+二分图最大匹配

    题目描述 n个物品,第i个位置有ai.bi.ci三种属性.每次可以选出满足$\ a_{p_i}<a_{p_{i+1}}\ ,\ b_{p_i}<b_{p_{i+1}}\ ,\ c_{p_i ...

  7. 2020.10.17 JZOJ 提高B组T2 导弹拦截

    2020.10.17 JZOJ 提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 敌国的导弹形成了立体打击,每个导弹可以抽象成一个三维空间中的 ...

  8. HDU-1257 导弹拦截系统 http://acm.hdu.edu.cn/showproblem.php?pid=1257

    Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高 ...

  9. AC日记——导弹拦截 洛谷 P1020 (dp+模拟)

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

随机推荐

  1. POJ 2068 NIm (dp博弈,每个人都有特定的取最大值)

    题目大意: 有2n个人,从0开始编号,按编号奇偶分为两队,循环轮流取一堆有m个石子的石堆,偶数队先手,每个人至少取1个,至多取w[i]个,取走最后一个石子的队伍输.问偶数队是否能赢. 分析: 题目数据 ...

  2. 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 ...

  3. lifecycle-mapping-metadata.xml

    <?xml version="1.0" encoding="UTF-8"?> <lifecycleMappingMetadata> &l ...

  4. UnityError 打包到Android错误解决

  5. HBase 相关API操练(二):Java API

    一.HBase Java编程 (1)HBase是用Java语言编写的,它支持Java编程: (2)HBase支持CRUD操作:Create,Read,Update和Delete: (3)Java AP ...

  6. angularjs $state.go页面不刷新数据

    假如进入market/beian/add添加数据,保存提交后回退market/beian列表页,没有自动更新数据,必须得手动下拉刷新才会出来 $state.go("marketBeian&q ...

  7. ElasticSearch java API-使用More like this实现基于内容的推荐

    ElasticSearch java API-使用More like this实现基于内容的推荐 基于内容的推荐通常是给定一篇文档信息,然后给用户推荐与该文档相识的文档.Lucene的api中有实现查 ...

  8. NGSL + NAWL 单词表 以及学习网站

    https://quizlet.com/44769538/nawl-1-1-50-flash-cards/ NAWL 网站 NAWL 单词表  + NGSL 单词表 http://www.newgen ...

  9. 前端JS电商放大镜效果

    前端JS电商放大镜效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  10. addin修改启动路径