传送门

Description

这片树林里有N座房子,M条有向道路,组成了一张有向无环图。
树林里的树非常茂密,足以遮挡视线,但是沿着道路望去,却是视野开阔。如果从房子A沿着路走下去能够到达B,那么在A和B里的人是能够相互望见的。
现在cl2要在这N座房子里选择K座作为藏身点,同时vani也专挑cl2作为藏身点的房子进去寻找,为了避免被vani看见,cl2要求这K个藏身点的任意两个之间都没有路径相连。
为了让vani更难找到自己,cl2想知道最多能选出多少个藏身点?

Input

第一行两个整数N,M。
接下来M行每行两个整数x、y,表示一条从x到y的有向道路。

Output

一个整数K,表示最多能选取的藏身点个数。

Sample Input

4 4
1 2
3 2
3 4
4 2

Sample Output

2

HINT

对于20% 的数据,N≤10,M<=20。
对于60% 的数据, N≤100,M<=1000。
对于100% 的数据,N≤200,M<=30000,1<=x,y<=N。

Solution

先把DAG传递闭包,然后求出新图的拆点二分图的最大匹配数即可

Code

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
using namespace std;int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}const int N=256;
bool vis[N],suc[N];
int n,m;
int mat[N],map[N][N],hide[N];bool dfs(int u) {F(i,1,n) if(map[u][i]&&!vis[i]) {vis[i]=1;if(!mat[i] || dfs(mat[i])) {mat[i]=u;return 1;}}return 0;
}int main() {n=read(),m=read();F(i,1,m) {int x=read(),y=read();map[x][y]=1;}F(i,1,n) map[i][i]=1;F(k,1,n) F(i,1,n) F(j,1,n) map[i][j]|=map[i][k]&&map[k][j];F(i,1,n) map[i][i]=0;int ans=n;F(i,1,n) {memset(vis,0,sizeof(vis));ans-=dfs(i);}printf("%d\n",ans);//以下注释部分用于求方案// F(i,1,n) suc[mat[i]]=1;// int tot=0;// F(i,1,n) if(!suc[i]) hide[++tot]=i;// memset(vis,0,sizeof(vis));// bool fla=1;// while(fla) {//  fla=0;//  F(i,1,ans) F(j,1,n) if(map[hide[i]][j]) vis[j]=1;//  F(i,1,ans) if(vis[hide[i]]) {//      fla=1;//      while(vis[hide[i]]) hide[i]=mat[hide[i]];//  }// }// F(i,1,ans) printf("%d ",hide[i]);putchar('\n');return 0;
} 

转载于:https://www.cnblogs.com/Menteur-Hxy/p/9501208.html

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

  1. 【NOIP2013模拟】Vani和Cl2捉迷藏 题解代码

    原题 Description vani和cl2在一片树林里捉迷藏-- 这片树林里有N座房子,M条有向道路,组成了一张有向无环图. 树林里的树非常茂密,足以遮挡视线,但是沿着道路望去,却是视野开阔.如果 ...

  2. 【NOIP2013模拟】Vani和Cl2捉迷藏

    文章目录 题目 分析 代码 题目 Description vani和cl2在一片树林里捉迷藏-- 这片树林里有NNN座房子,MMM条有向道路,组成了一张有向无环图. 树林里的树非常茂密,足以遮挡视线, ...

  3. POJ - 2594 Treasure Exploration(最小路径覆盖-二分图最大匹配+传递闭包)

    题目链接:点击查看 题目大意:给出一个有向图,现在需要让最少的机器人沿着图遍历所有点,求出最少需要机器人的数量,注意每个点可以重复遍历 题目分析:因为要遍历所有点,所以还是变成了二分图的最小路径覆盖问 ...

  4. HDU - 1151 Air Raid(最小路径覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个有向图,现在需要在不同的地方空降伞兵,保证所有伞兵沿着道路可以走完所有城市,求出最少伞兵的数量 题目分析:我们的目的是要用最少的路径覆盖所有顶点,换句话说就是二分 ...

  5. UVALive - 3126 Taxi Cab Scheme(最小路径覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:有n个人要坐出租车,每个人上车的时间已知,规定出租车必须在每个人上车之前的一分钟之前到达这个人的位置,之后给出每个人的当前坐标以及需要达到的目的地坐标,行驶完该段路程的时 ...

  6. POJ - 3020 Antenna Placement(最小路径覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个n*m的地图,图中'o'代表空地,'*'代表城市,现在需要给城市装无线网,每个无线网最多可以覆盖相邻的两个城市,问覆盖所有的城市最少需要装多少个无线网 题目分析: ...

  7. codevs 2494 Vani和Cl2捉迷藏

    /* 一开始大意了 以为和bzoj上的祭祀是一样的(毕竟样例都一样) 这里不知相邻的点可以相互到达 间接相连的也可以到达 所以floyed先建立一下关系 再跑最大独立集 下面贴一下95 和 100的代 ...

  8. Acwing.379 捉迷藏(最小路径重复点覆盖)

    传送门 1.前置知识 1.最小路径点覆盖 DAG中选出最小数量的不相交路径(无公共点),将所有点覆盖. 求法:将DAG中的点拆成出点和入点,构成一个二分图. 则原图的最小路径点覆盖转化到新图中: 1. ...

  9. 【网络流24题】最小路径覆盖问题

    [题目]1738: 最小路径覆盖问题 [题解]网络流 关于输出路径,因为即使有反向弧经过左侧点也一定会改变左侧点的去向,若没连向右侧就会被更新到0,所以不用在意. mark记录有入度的右侧点,然后从没 ...

最新文章

  1. 初学大数据,经典文章,保存一波
  2. lambda表达式_Lambda表达式详解
  3. 嵌套饼图_旭日图的效率,高到饼图都羡慕
  4. php算法-输出100以内能被3整除的整数
  5. Weblogic 部署两个应用
  6. 3D打印切片软件支撑算法研究
  7. twaver html5,twaver-html5-1.5.9---2D
  8. win7摄像头软件_【pc软件】功能强大的GIF动图制作录制工具,秒杀
  9. vue各模块功能范围,webpack属性配置
  10. 使用UpdateLayeredWindow有概率出现317错误解决方法
  11. Codeforces Edu:双指针 » Step 3 » Practice:A. Looped Playlist
  12. VBS word/excel 转 PDF
  13. 新浪短网址api接口——5个可生成新浪t.cn短链的在线工具网站评测
  14. android图片模糊效果,Android下实现高效的模糊效果
  15. ZUCC_操作系统_Lab4线程的创建与管理
  16. 强哥说Java--Java Scanner 类
  17. tcp_diag 内核相关实现 以及调用层次
  18. 解决页面可以左右滑动但无法上下滑动(有坑))
  19. python3安装ibm_db
  20. java备忘录代码和解释_Java备忘录

热门文章

  1. Binary Agents
  2. Boost.ASIO简要分析-4 多线程
  3. 记模拟面试日记(更新...)
  4. StringBuffer和StringBuilder总结
  5. 初三学生什么时候上一对一效果最好?
  6. 在公司交了十年社保了,退休了,自己还要补交六、七万元社保,你觉得该不该补交?
  7. 珠海格力工厂一线员工待遇如何?
  8. 为什么没人种植金丝楠木?
  9. 成功最快的就是改变你这个思维,拥有这个全新的思维
  10. 为什么你写的文字没人看,没人赞?