当前位置: 首页 > news >正文

[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;
}

转载于:https://www.cnblogs.com/ghostcai/p/9867029.html

相关文章:

  • this class is not key value coding-compliant for the key XXX错误的解决方法
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • LeetCode——Implement Trie (Prefix Tree)
  • 从普通程序员到身价过百亿:追求长期价值的耐心,决定了你能走多远
  • Android图形显示系统——概述
  • WPF中查看PDF文件
  • Jenkins——持续集成服务器
  • JVM里面hashtable和hashmap实现原理
  • iOS 10 的推送 User Notifications Framework
  • .NET连接MongoDB数据库实例教程
  • rar自动压缩备份
  • Java_BigDecimal类型比较大小
  • 小程序使用smart模板的方法
  • LoadRunner上传文件脚本
  • Android自定义view双缓存技术
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • Angular数据绑定机制
  • golang中接口赋值与方法集
  • js继承的实现方法
  • js作用域和this的理解
  • Promise面试题,控制异步流程
  • Python socket服务器端、客户端传送信息
  • redis学习笔记(三):列表、集合、有序集合
  • vue中实现单选
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 区块链分支循环
  • 微服务入门【系列视频课程】
  • Android开发者必备:推荐一款助力开发的开源APP
  • 数据可视化之下发图实践
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • $$$$GB2312-80区位编码表$$$$
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (python)数据结构---字典
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (六)c52学习之旅-独立按键
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)Windows2003安全设置/维护
  • ./和../以及/和~之间的区别
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .htaccess 强制https 单独排除某个目录
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core 6 集成和使用 mongodb
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET 分布式技术比较
  • .net 简单实现MD5
  • /bin/rm: 参数列表过长"的解决办法
  • @Builder用法
  • @WebService和@WebMethod注解的用法
  • [ACM] hdu 1201 18岁生日
  • [acm算法学习] 后缀数组SA