Dilworth定理

Dilworth定理,一言以蔽之,偏序集能划分成的最少的全序集个数等于最大反链的元素个数

这对于数学不好的人(如litble)来说,不是句人话。翻译一下几个概念:

偏序

偏序嘛,应该不是那么陌生的东西 ,所谓“时属九月,三维偏序” 。

定义集合 A A A中的一个二元关系 ≤ \leq ≤,譬如对于 ( a 1 , b 1 ) (a_1,b_1) (a1​,b1​)和 ( a 2 , b 2 ) (a_2,b_2) (a2​,b2​)两个元素,我可以定义 ( a 1 , b 1 ) ≤ ( a 2 , b 2 ) (a_1,b_1) \leq (a_2,b_2) (a1​,b1​)≤(a2​,b2​)当且仅当 a 1 ≤ a 2 a_1 \leq a_2 a1​≤a2​且 b 1 ≤ b 2 b_1 \leq b_2 b1​≤b2​,而若 a 1 > a 2 a_1>a_2 a1​>a2​, b 1 ≤ b 2 b_1 \leq b_2 b1​≤b2​,这两个元素就不可比了。

在满足以下三个条件时, ( A , ≤ ) (A,\leq) (A,≤)就是个偏序集:

1.自反性: ∀ a ∈ A , a ≤ a \forall a \in A,a \leq a ∀a∈A,a≤a

2.反对称性: ∀ a , b ∈ A \forall a,b \in A ∀a,b∈A,若 a ≤ b , b ≤ a a \leq b,b \leq a a≤b,b≤a,则 a = b a=b a=b。

3.传递性: ∀ a , b , c ∈ A \forall a,b,c \in A ∀a,b,c∈A,若 a ≤ b , b ≤ c a \leq b, b \leq c a≤b,b≤c,则 a ≤ c a \leq c a≤c。

全序集

设 ≤ \leq ≤为非空集合 A A A上的一个偏序关系,若对于集合 ∀ a , b ∈ B \forall a,b \in B ∀a,b∈B,都有 a ≤ b a \leq b a≤b或 b ≤ a b \leq a b≤a(即元素两两可比),就称 ( B , ≤ ) (B, \leq) (B,≤)为一个全序集。

反链

若偏序集 ( B , ≤ ) (B, \leq) (B,≤)中的元素两两不可比,则称 B B B为反链。

例题

洛谷P1020 导弹拦截

我们若设每一个元素为二元组 ( a , b ) (a,b) (a,b), a a a是这颗导弹的抵达时间, b b b是高度,那么令偏序关系 ≤ \leq ≤为: a 1 ≤ a 2 a_1 \leq a_2 a1​≤a2​且 b 1 ≥ b 2 b_1 \geq b_2 b1​≥b2​。

第二问问的是最少被划分为多少全序集,也就是要求最长反链长度,也就是求两两满足满足 a 1 ≤ a 2 a_1 \leq a_2 a1​≤a2​且 b 1 &lt; b 2 b_1 &lt; b_2 b1​<b2​的最大集合,也就是求最长严格下降子序列长度。

洛谷P4298/bzoj1143 祭祀

令偏序关系 ≤ \leq ≤为 a a a能到达 b b b,题问要求的是最长反链长度,就求最少被划分为多少全序集,也就是求最少路径覆盖。

至于输出方案呢,第一问是从每一个左侧未匹配点出发遍历匈牙利树,将沿途的所有点打上标记。如果一个原图中的点,在左边的分点打了标记,在右边的没打,就是一个祭祀点。至于为什么,litble太蠢暂未搞懂,希望大神在评论中指教,感激不尽。

第二问是枚举所有点,删除和它可比(可达它或它可达)的所有点,跑一遍最少路径覆盖,若只比原答案少1,则这个点可以作为祭祀点。

#include<bits/stdc++.h>
using namespace std;
#define RI register int
const int N=105;
int n,m,tot,ans,tim;
int h[N],ne[N*N],to[N*N],L[N][N],havcp[N],cp[N],vis[N];
int bj1[N],bj2[N],ban[N];void floyed() {for(RI k=1;k<=n;++k)for(RI i=1;i<=n;++i)for(RI j=1;j<=n;++j)if(i!=k&&k!=j&&i!=j&&L[i][k]&&L[k][j]) L[i][j]=1;
}
void add(int x,int y) {to[++tot]=y,ne[tot]=h[x],h[x]=tot;}
int dfs(int x) {bj1[x]=1;for(RI i=h[x];i;i=ne[i])if(vis[to[i]]!=tim&&!ban[to[i]]) {vis[to[i]]=tim,bj2[to[i]]=1;if(!cp[to[i]]||dfs(cp[to[i]])){havcp[x]=1,cp[to[i]]=x;return 1;}}return 0;
}void print() {for(RI i=1;i<=n;++i) bj1[i]=bj2[i]=0;for(RI i=1;i<=n;++i) if(!havcp[i]) ++tim,dfs(i);for(RI i=1;i<=n;++i) printf("%d",bj1[i]&&!bj2[i]);puts("");for(RI i=1;i<=n;++i) {for(RI j=1;j<=n;++j) cp[j]=ban[j]=0;int js=0;for(RI j=1;j<=n;++j)if(L[j][i]||L[i][j]||i==j) ban[j]=1;else ++js;for(RI j=1;j<=n;++j) {if(ban[j]) continue;++tim;if(dfs(j)) --js;}printf("%d",js==ans-1);}
}
int main()
{int x,y;scanf("%d%d",&n,&m);for(RI i=1;i<=m;++i) scanf("%d%d",&x,&y),L[x][y]=1;floyed();for(RI i=1;i<=n;++i)for(RI j=1;j<=n;++j)if(i!=j&&L[i][j]) add(i,j);ans=n;for(RI i=1;i<=n;++i) {++tim;if(dfs(i)) --ans;}printf("%d\n",ans);print();return 0;
}

Dilworth定理是个啥东东相关推荐

  1. VSCode 安装 Go 插件、gopls 是个什么东东

    原文地址: VSCode 开发 Go 程序也可以和 GoLand 一样强大 VSCode 建议你启用 gopls,它到底是个什么东东?

  2. NOIP模拟 蛋糕(DP+Dilworth定理)

    QAQ [题目分析] 谁能告诉我为什么我的网络流炸了吗........(我相信是SPJ的锅这年头暴力不好打啊) 所以我们按x排序,然后就是要找到序列中严格上升序列的最少个数,然后....duang.. ...

  3. 为什么会有jsessionid,这个东东有什么用呢?

    2019独角兽企业重金招聘Python工程师标准>>> 为什么会有jsessionid,这个东东有什么用呢? 博客分类: java 为什么会有jsessionid,这个东东有什么用呢 ...

  4. 网管必看的好东东(一)

    自动释放系统资源 在Windows中每运行一个程序,系统资源就会减少.有的程序会消耗大量的系统资源,即使把程序关闭,在内存中还是有一些没用的DLL文件在运行,这样就使得系统的运行速度下降.不过我们可以 ...

  5. 一个超牛的东东:专门删除牛皮文件和文件夹

    一个超牛的东东:专门删除牛皮文件和文件夹 电脑中有一些不知为何删除不掉的文件和文件夹,无论用什么超级粉碎机都无法清除. 在网上看到的一个方法可以帮忙 注意:使用时请小心, 建立非常简单: 新建文本文档 ...

  6. BZOJ.4160.[NEERC2009]Exclusive Access 2(状压DP Dilworth定理)

    BZOJ DAG中,根据\(Dilworth\)定理,有 \(最长反链=最小链覆盖\),也有 \(最长链=最小反链划分数-1\)(这个是指最短的最长链?并不是很确定=-=),即把所有点划分成最少的集合 ...

  7. 【任务脚本】更新京东任务东东农场脚本,京东种水果脚本,京东活动任务半自动程序...

    最近看到大牛更新了东东农场的脚本,东东农场就是京东种水果的日常任务,可以搜索"东东农场"进入(亲测猕猴桃挺好吃的),测试体验了一下脚本,有些不稳定,不过可以用,只是可能需要多运行两 ...

  8. 转发高人文章:以前写的一些有关代码签名/时间戳数字证书的东东

    此文摘自:http://bbs.wosign.com/forum.php?mod=viewthread&tid=86 以前苦于没有专门的平台和数字证书方面的专家.爱好者一起交流,写的一些有关代 ...

  9. JavaScript怎么安装_几句话说清楚JavaScript、V8引擎、NodeJS、NMP,到底是什么东东...

    小程序开发如火如荼,如果你是程序员,你还不懂小程序的开发,恐怕会被同行认为太LOW了吧!不过,新入行小程序开发者确实会被新的名词搞得一头雾水. 比如JavaScript不是在浏览器端运行吗,怎么还可以 ...

最新文章

  1. 老版本select2设置初始值
  2. android 价格排序筛选页面,Android应用开发之基于Popupwindow实现的筛选房源信息等相关的可自由排序控件...
  3. 分布式锁用Redis还是Zookeeper?
  4. ios7开发学习笔记-包括c oc 和ios介绍
  5. 5分钟 0元搭建个人独立博客网站(一)
  6. LeetCode: Substring with Concatenation of All Words
  7. 拓端tecdat|R语言极值分析:分块极大值Block-maxima、阈值超额法threshold excess、广义帕累托分布GPD拟合降水数据时间序列
  8. 动态添加gridview行【转:http://www.cnblogs.com/oec2003/articles/1069796.html】
  9. 海信电视怎么删除自带应用
  10. Kotlin教程,从入门到精通
  11. c语言编写函数isprime(int a),用来判断自变量a是否为素数,若是素数,函数返回1,否则返回0。
  12. 数组(Java基础内容)
  13. 桌面版docker安装搭建
  14. 招商银行笔试题之X游戏
  15. Codeforces 686D. Kay and Snowflake
  16. 学习可爱彩色线条PS极简马克笔简笔画:饮品篇
  17. 百度技术:“App 优化网络,先从 HTTPDNS 开始” | 原理到实战
  18. 爬虫(二) parse、各类请求和伪装UA
  19. 【postgres】源码结构
  20. 前端页面适应不同分辨率

热门文章

  1. 索尼xz Android 内存,首发Android 9.0索尼新旗舰XZ2P曝光:搭载骁龙845处理器和6GB内存...
  2. 我的武林秘籍设计模式之装饰者模式
  3. 黑客利用SSH弱密码攻击控制Linux服务器,潜在目标约十万IP天
  4. 轴旋转——制作别样的图片浏览器
  5. 阿里云主机购买及配置Linux服务器(centos7.5)详细步骤
  6. HTML基础 + 实例解析
  7. python制作英语小词典_如何用python(django)创建英语词典应用程序?
  8. 给小仙女讲什么是javascript(一)
  9. 日化美妆难突围,看爱码物联如何冲破传统营销壁垒
  10. GPT系列详解:初代GPT