传送门

1.前置知识

1.最小路径点覆盖

DAG中选出最小数量的不相交路径(无公共点),将所有点覆盖。
求法:将DAG中的点拆成出点和入点,构成一个二分图。
则原图的最小路径点覆盖转化到新图中:
1.无公共点->每个点最多只有一个出度一个入度 ->…->新图中的任意两条边之间不相交-> 新图中的边都是匹配边。

小结论:每个路径终点 对应 一个左侧非匹配点
<=> 让左侧非匹配点最少 n-m
<=> 让左侧匹配点最多 m
<=> 找最大匹配边数 m
->二分图最大匹配数 = 总点数-最小路径点覆盖

2.最小路径重复点覆盖

相较于最小路径点覆盖,取消了无公共点的限制
求法:先做一次传递闭包。
原图G最小路径重复点覆盖==新图G’最小路径点覆盖。
(证明没怎么看懂 ,wsfw)

2.题意分析

求DAG中 选择尽可能多的点,使两点之间不能相互到达。
等价于求最小路径重复点覆盖。
最小路径重复点覆盖中的每一条路径,都只能选择一个点。
最优解也就是每条路径都要选一个点。

3.代码

#include <bits/stdc++.h>using namespace std;
//-----pre_def----
const double PI = acos(-1.0);
const int INF = 0x3f3f3f3f;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
#define fir(i, a, b) for (int i = (a); i <= (b); i++)
#define rif(i, a, b) for (int i = (a); i >= (b); i--)
#define endl '\n'
#define init_h memset(h, -1, sizeof h), idx = 0;
#define lowbit(x) x &(-x)//---------------
const int N = 200 + 10, M = 30010;
int n, m;
bool st[N], d[N][N];
int match[N];bool find(int u) //匈牙利
{for (int i = 1; i <= n; i++){if (d[i][u] && !st[i]){st[i] = true;int t = match[i];if (t == 0 || find(t)){match[i] = u;return true;}}}return false;
}void init() {}
int main()
{#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);int StartTime = clock();
#endifscanf("%d%d", &n, &m);while (m--){int a, b;scanf("%d%d", &a, &b);d[a][b] = true;}//传递闭包fir(k, 1, n)fir(i, 1, n)fir(j, 1, n)d[i][j] |= d[i][k] & d[k][j];//求最大匹配int res = 0;fir(i, 1, n){memset(st, 0, sizeof st);res += find(i);}printf("%d\n", n - res);
#ifndef ONLINE_JUDGEprintf("Run_Time = %d ms\n", clock() - StartTime);
#endifreturn 0;
}

再战图论

Acwing.379 捉迷藏(最小路径重复点覆盖)相关推荐

  1. 估计人数【最小路径重复点覆盖】【直接在(i,j)建一个新点】

    估计人数 题意 思路 用最少的人,走完这几条线.最小重复路径点覆盖问题 建图之后,跑一下二分图. 考虑建图:图中'1'连着完下.或者右走.我们把图中所有的1编号,然后建图,然后floly,然后匈牙利. ...

  2. 有上下界网络流 ---- P4843 清理雪道(DAG图上最小路径重复边覆盖)【模板】有源汇上下界最小流

    题目链接 题目大意: 解题思路: 首先我们发现对于每条边至少要覆盖一次,最多覆盖无数次 那么就有点像上下界网络流了[1,INF][1,INF][1,INF]的限制关系 跑一边最小流就可以了!! #in ...

  3. [tyvj1957 Poetize5] Vani和Cl2捉迷藏 (最小路径可重点覆盖+二分图最大匹配)

    传送门 Description 这片树林里有N座房子,M条有向道路,组成了一张有向无环图. 树林里的树非常茂密,足以遮挡视线,但是沿着道路望去,却是视野开阔.如果从房子A沿着路走下去能够到达B,那么在 ...

  4. 二分图专题系列各大知识点总结(匈牙利,染色法,最大独立集,最小点覆盖,最小路径覆盖)

    本文概论 二分图的判断方法:图中不存在奇数环----->染色法判断二分图不存在矛盾 二分图: 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i, ...

  5. LUOGU P2764 最小路径覆盖问题 (最小路径点覆盖)

    解题思路 有向图最小路径点覆盖问题,有这样的结论就是有向图最小路径点覆盖等于n-拆点二分图中最大匹配.具体怎么证明不太知道..输出方案时找到所有左部未匹配的点一直走$match​$就行了. #incl ...

  6. 最小路径覆盖,最小点覆盖,最大独立点集(转)

    来自:http://blog.csdn.net/l04205613/article/details/6278394 node  1:最小路径覆盖 在一个PXP的有向图中,路径覆盖就是在图中找一些路经, ...

  7. 二分图大讲堂——彻底搞定最大匹配数(最小覆盖数)、最大独立数、最小路径覆盖、带权最优匹配

    二分图匹配 二分图大讲堂--彻底搞定最大匹配数(最小覆盖数).最大独立数.最小路径覆盖.带权最优匹配(转) 文本内容框架: §1图论点.边集和二分图的相关概念和性质 §2二分图最大匹配求解 匈牙利算法 ...

  8. 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)

    在讲述这两个算法之前,首先有几个概念需要明白: 二分图:  二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边( ...

  9. 有向图最小路径覆盖方法浅析、证明 //hdu 3861

    路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联. 对于一个有向无环图怎么求最小路径覆盖? 先构造二分图: 对于原图,先拆点,吧每个点i拆成ii,iii. ...

最新文章

  1. 网站排名好却没流量到底是什么环节出了问题?
  2. Ansible之playbook(剧本)介绍和配置详解
  3. 彩色图如何转换成灰度
  4. html网页自动铺满屏幕,如何使HTML元素的区域铺满全屏
  5. selenium处理iframe定位于切换问题解决办法
  6. 委托C# 生活 实例
  7. android mysql开发工具_Android开发工具--adb的使用
  8. JS之检索子字符串的search方法
  9. jQuery --- grep
  10. ctrl z推出查看文本怎么结束_最实用的10个电脑常用快捷键!Ctrl+Z的鬼才反向了解一下!...
  11. Java后端实战项目推荐-尚医通
  12. hdfs命令,hadoop基本常用命令
  13. 微信小程序码无法解析到scene参数问题
  14. python中矩阵的表示_Python表示矩阵的方法分析
  15. 泰坦尼克号生还者预测
  16. 支付宝APP支付——支付流程说明及示例
  17. [待解答]R语言读文件报错“列的数目比列的名字要多”
  18. 功能测试技术--因果图法
  19. 【软件推荐】身为高级unity工程师,电脑上的软件一览表,从工作顺序带你一览高级unity工程师所用的软件,如果高级是你的目标,这篇博客绝对不会让你失望
  20. 快速实现分列转到行(SQL版)一个问题,三种解法!

热门文章

  1. CocosCreator 集成 Pomelo 教程
  2. Redis主从同步方面的坑
  3. JQuery checkedBox全选和全部选
  4. 【维生素C语言】第十七章 - C语言预处理(上)
  5. Redis知识点总结(操作入门级)
  6. 臻图信息基于GIS可视化构建智慧消防平台,全面保障城市安全运营
  7. 42_综合案例——发红包【界面版】
  8. 数据应用于各个行业,具体的应用价值是什么?
  9. 终于把Linux中的access搞懂了 (内附C语言测试代码)
  10. java知识汇总—思维导图