bzoj 2044 三维导弹拦截——DAG最小路径覆盖(二分图)
2024-08-30 20:03:29
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2044
还以为是CDQ。发现自己不会三维以上的……
第一问可以n^2。然后是求最长不下降子序列吗?dilworth好像不能用吧。
那就是能从自己转移到哪些状态就从自己向哪些状态连边,然后就是最小路径覆盖了。用二分图的 n-最大匹配 。
注意:没有位置的限制所以可以先按 x 排序!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=N*N;
int n,hd[N<<],xnt,to[M],nxt[M],dp[N],ans,per[N];
bool vis[N];
struct Node{
int x,y,z;
bool operator< (const Node &b) const
{return x<b.x;}
}a[N];
struct Ed{
int x,y;Ed(int x=,int y=):x(x),y(y) {}
}ed[M];
void add(int x,int y)
{
to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;
}
bool dfs(int cr)
{
for(int i=hd[cr],v;i;i=nxt[i]) if(!vis[v=to[i]])
{
vis[v]=;
if(!per[v]||dfs(per[v]))
{
per[v]=cr;return true;
}
}
return false;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
sort(a+,a+n+);
for(int i=;i<=n;i++)
{
dp[i]=;
for(int j=;j<i;j++)
if(a[j].x<a[i].x&&a[j].y<a[i].y&&a[j].z<a[i].z)
dp[i]=max(dp[i],dp[j]+),ed[++xnt]=Ed(j,i);
ans=max(ans,dp[i]);
}
printf("%d\n",ans); ans=; int tmp=xnt; xnt=;
for(int i=;i<=tmp;i++) add(ed[i].x,ed[i].y);
for(int i=;i<=n;i++)
{
memset(vis,,sizeof vis);
ans+=dfs(i);
}
printf("%d\n",n-ans);
return ;
}
最新文章
- Java排序算法——冒泡排序
- 第3章 jQuery的DOM操作
- linux程序设计1
- 机器学习之Hash集合问题
- MongoDB 入门之基础 DDL
- 解决ubuntu下安装phpmyadmin访问不了的问题
- DC-EPC小结
- bzoj3261 可持久化trie
- Bzoj 4034: [HAOI2015]T2 树链剖分,子树问题,dfs序
- ssh注解开发
- C语言随笔_fopen
- Banner图二三事
- 文件操作(File类等)API摘要
- priority_queue和sort应用
- 免费的DDos网络测试工具集合
- GitLab配置后收取不到邮件问题
- 图片处理服务 ImageMagick 的安装和使用
- yield send 的一些使用细节
- 第八次作业(课堂实战)- 项目UML设计(团队)
- python装饰器语法
热门文章
- windy数(简单数位DP)
- JVM对象
- 3.26课&#183;&#183;&#183;&#183;&#183;&#183;&#183;&#183;&#183;window.document对象
- .vimrc .bashrc
- [原创]java WEB学习笔记38:EL 中的 11个 隐含对象 详解
- [原创]java WEB学习笔记37:EL表达式(简介,运算符,自动类型转换,保留字,隐含对象)
- 0423 hashlib模块、logging模块、configparse模块、collections模块
- web前端框架之自定义form表单验证
- location记录<;18.7.21>;
- Cocos2dx版本与CocosBuilder版本匹配问题