题目描述:

给你一个n个点m条边的有向无环图,求出最大点集满足其中任意两点间都不能存在路径

也就是对于所有的x, y∈S,x不能到达y,y也不能到达x

对于有向无环图(DAG):

链:一些点的集合,链中任意两点x, y,一定满足x能到达y或者y能到达x

反链:一些点的集合,链中任意两点x, y,一定满足x不能到达y,y也不能到达x

而上题显然就是求出最长反链

定理:最长反链 = 最小链覆盖(用最少的链覆盖图中所有的点,即路径可重叠的最小路径覆盖)

这样题目就又转成了求可重叠的最小路径覆盖

对于二分图:

最小点覆盖(每条边都有至少一个点在集合中)=  最大匹配

最小边覆盖(每个点都有至少一个连它的边在集合里 ,如果某点没有边相连就直接+1)=  二分图点数 - 最大匹配

最大独立集(集合中任意两点之间都没有边)=  二分图点数 - 最大匹配

DAG的最小路径覆盖:

将原图的每个点拆成xa,xb两个,分别在二分图的两边,如果原图存在有向边x->y,那么xa到yb连一条边

那么DAG最小路径覆盖(路径不可重叠的) = 原图点数 - 最大匹配

证明:

开始每个点都独立为一条路径,总共有n条不相交路径,在二分图里每加一条边就相当于将两条路径合成了一条

如果二分图中两条边有公共点,那么这两条边就相当于原图中两条到同一个点的边或者从同一个点引出的两条边

显然这两条边一定属于不同路径!

所以说DAG中最小不可重叠路径覆盖可以通过转成二分图求出

而题目中要求的是最小可重叠路径覆盖

那怎么办?

其实很简单,改一下只要x能到达y,那么xa到yb连一条边再求一遍最大匹配就ok了

floyd+二分匹配搞定,复杂度O(n^3)

1143: [CTSC2008]祭祀river

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 3132  Solved: 1606
[Submit][Status][Discuss]

Description

在遥远的东方,有一个神秘的民族,自称Y族。他们世代居住在水面上,奉龙王为神。每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动。我们可以把Y族居住地水系看成一个由岔口和河道组成的网络。每条河道连接着两个岔口,并且水在河道内按照一个固定的方向流动。显然,水系中不会有环流(下图描述一个环流的例子)。

由于人数众多的原因,Y族的祭祀活动会在多个岔口上同时举行。出于对龙王的尊重,这些祭祀地点的选择必须非常慎重。准确地说,Y族人认为,如果水流可以从一个祭祀点流到另外一个祭祀点,那么祭祀就会失去它神圣的意义。族长希望在保持祭祀神圣性的基础上,选择尽可能多的祭祀的地点。

Input

第一行包含两个用空格隔开的整数N、M,分别表示岔口和河道的数目,岔口从1到N编号。接下来M行,每行包含两个用空格隔开的整数u、v,描述一条连接岔口u和岔口v的河道,水流方向为自u向v。 
N ≤ 100 M ≤ 1000

Output

  第一行包含一个整数K,表示最多能选取的祭祀点的个数。

Sample Input

4 4
1 2
3 4
3 2
4 2

Sample Output

2

就是上面例子那道题

#include<stdio.h>
#include<string.h>
int n, road[105][105], link[105], vis[105];
int Sech(int x)
{int i;for(i=1;i<=n;i++){if(road[x][i] && vis[i]==0){vis[i] = 1;if(link[i]==0 || Sech(link[i])){link[i] = x;return 1;}}}return 0;
}
int main(void)
{int i, j, k, m, x, y, ans;scanf("%d%d", &n, &m);for(i=1;i<=m;i++){scanf("%d%d", &x, &y);road[x][y] = 1;}for(k=1;k<=n;k++){for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(road[i][k] && road[k][j])road[i][j] = 1;}}}ans = 0;for(i=1;i<=n;i++){memset(vis, 0, sizeof(vis));ans += Sech(i);}printf("%d\n", n-ans);return 0;
}

最长反链(bzoj 1143: [CTSC2008]祭祀river)相关推荐

  1. bzoj 1143: [CTSC2008]祭祀river

    Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都 会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组 ...

  2. 1143: [CTSC2008]祭祀river

    Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4018  Solved: 2048 [Submit][Status][Discuss] Descri ...

  3. BZOJ.1143.[CTSC2008]祭祀(Dilworth定理 最大流ISAP)

    题目链接 题目是求最长反链,反链指点集内任意两点不能互相到达. 根据Dilworth定理,在DAG中,\[最长反链 = 最小路径覆盖 = V - 最大匹配数\] 用Floyd求一遍传递闭包后,在所有可 ...

  4. bzoj1143[CTSC2008]祭祀river

    bzoj1143[CTSC2008]祭祀river 题意: Y族居住地水系是一个由岔口和河道组成的网络.每条河道连接着两个岔口,并且水在河道内按照一个固定的方向流动.水系中不会有环流.由于人数众多的原 ...

  5. [bzoj1143][CTSC2008]祭祀river——DAG上最长反链,Dilworth定理,最大二分图匹配,Floyd

    题目大意: 给定一个DAG图,求最长反链(即一个点集,其中任意点两两不可以相互到达). 思路: 一开始我其实是想用求最大独立集的方法去求的.但是并不会(好像也过不去). 题目所要求的是最长反链,需要用 ...

  6. BZOJ1143[CTSC2008]祭祀river 偏序集及Dilworth定理

    这里讲一下我对偏序集的认识   如果有偏差可以评论我  我会修改 一:定义 (度娘上copy来的  不想看的可以跳过 设R是非空集合A上的一个二元关系,若R满足: 自反性.反对称性.传递性,则称R为A ...

  7. [CTSC2008]祭祀river

    Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典,Y族都会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组成的 ...

  8. 【bzoj1143】[CTSC2008]祭祀river Floyd+网络流最小割

    在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都 会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组成的网络.每条河道连接着 ...

  9. BZOJ1143: [CTSC2008]祭祀river 网络流_Floyd_最大独立集

    Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都 会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组 ...

最新文章

  1. m-orchastration system
  2. 键盘回车事件导致页面刷新的问题
  3. PHP中用编码代码,编码对照表的使用(2)_php
  4. boost::geometry::sym_difference用法的测试程序
  5. 8.ActionContext类与Servlet API解耦的访问方式
  6. 数据库原理与应用(SQL Server)笔记 第一章 数据定义语言和数据操纵语言
  7. 项目 接入 在线预览
  8. 什么是PV UV PR值
  9. MongoDB(三):MongoDB概念解析
  10. 对js运算符“||”和“”的总结
  11. 【stm32学习】正点原子stm32f103学习——开发板入门
  12. TCL语言中的执行顺序
  13. dump日志分析工具
  14. 幼儿园计算机网络教室工作计划,2017年幼儿园教学工作计划范文
  15. 写给自己的话:是时候有个计划了,骚年
  16. VueUse(中文)——简介
  17. CTF - MISC安全杂项解题事项
  18. bak文件转oracle文件,如何在Oracle 11g中恢复.bak文件(How to restore .bak file in oracle 11g)...
  19. STM32F407ZGT6的串口通信
  20. 操作系统---栈区与堆区 转自:https://blog.csdn.net/amcp9/article/details/79597481

热门文章

  1. php和python-PHP和Python如何选择?或许可以考虑这三个问题
  2. python骗局-如何识破python小课骗局_怎样选择学校呢
  3. 浅谈语音识别技术的发展趋势与应用前景 - 全文
  4. android usb软件自动安装监控,Android中监控USB的插拔
  5. Node-ES6模块化
  6. 【java笔记】缓冲流
  7. 蓝桥杯笔记:带分数(dfs排列问题)
  8. LIRe提供的图像检索算法的速度
  9. openfiledialog选择文件会占用文件_铁皮文件柜的尺寸规格如何选择?选购花都文件柜要注意的问题...
  10. python安装csv出错_python处理csv文件问题解决贴