原题

Description

vani和cl2在一片树林里捉迷藏……

这片树林里有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

Data Constraint

对于20% 的数据,N≤10,M<=20N≤10,M 。

对于60% 的数据 , N≤100,M<=1000N≤100,M 。

对于100% 的数据,N≤200,M<=30000,1<=x,y<=NN≤200,M 。

题解

  • 算法:二分图最小路径覆盖、floyd传递闭包

  • 首先对读入的有向图做传递闭包(即 Floyd式的“最短路”,详见下代码)

  • 然后求最小路径覆盖即可。最小路径覆盖数=n-最大匹配。

  • 最大匹配用匈牙利算法,二分图可用邻接表存。

Code

#include<cstdio>
#include<cstring>
using namespace std;
const int N=201;
int a[N][N],f[N],ans;
bool dis[N][N],bz[N];
inline int read()
{int data=0; char ch=0;while(ch<'0' || ch>'9') ch=getchar();while(ch>='0' && ch<='9') data=data*10+ch-'0',ch=getchar();return data;
}//读入优化
inline bool find(int x)
{for(int i=1;i<=a[x][0];i++)if (!bz[a[x][i]]){bz[a[x][i]]=true;if (!f[a[x][i]] || find(f[a[x][i]])){f[a[x][i]]=x;return true;}}return false;
}//匈牙利算法
int main()
{int n=read(),m=read();for(int i=1;i<=m;i++) dis[read()][read()]=true;//邻接矩阵for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)if(dis[i][k])for(int j=1;j<=n;j++)if(dis[k][j]) dis[i][j]=true;//Floyd传递闭包for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(dis[i][j]) a[i][++a[i][0]]=j;//邻接表for(int i=1;i<=n;i++){memset(bz,false,sizeof(bz));if(find(i)) ans++;//最大匹配}printf("%d",n-ans);//顶点数-最大匹配return 0;
}
请多多指教!

【NOIP2013模拟】Vani和Cl2捉迷藏 题解代码相关推荐

  1. 【NOIP2013模拟】Freda的传呼机 题解+代码

    这题又有点像码农题!! Description 为了 随时 与 rainbow快速交流, Freda制造了 两部传呼机 .Freda和 rainbow所在的地方有N座房屋.M条双向 光缆 .每条光缆连 ...

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

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

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

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

  4. codevs 2494 Vani和Cl2捉迷藏

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

  5. JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)

    3518. [NOIP2013模拟11.6A组]进化序列(evolve) (File IO): input:evolve.in output:evolve.out Time Limits: 1000 ...

  6. JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)

    3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Det ...

  7. 6.26CF模拟赛D:黑白条题题解

    6.26CF模拟赛D:黑白条题题解 题目描述 链接 文字描述 题目分析 代码实现 题目描述 链接 6.26CF模拟赛D题 文字描述 D. 黑白条 time limit per test2 s. mem ...

  8. jzoj 3461. 【NOIP2013模拟联考5】小麦亩产一千八(math)

    3461. [NOIP2013模拟联考5]小麦亩产一千八 Description "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾--",话说HYSBZ(Hen ...

  9. python软件代码示例-用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

最新文章

  1. 「机器学习速成」训练神经网络:反向传播、梯度爆炸消失Dropout
  2. Java 引用分类:StrongReference、SoftReference、WeakReference、PhantomReference
  3. 【转】如何更改VS2010的[默认开发语言]默认环境设置 .
  4. python 字典添加元素乱序了_Python有序字典的两个小“惊喜”
  5. 年薪50W不是梦,100天掌握BAT前端中高级工程师必备技能
  6. 你还在使用xml配置mybatis吗,快来试试这种方式吧
  7. 自动驾驶,不要再杀人了
  8. java 命名参数动态替换_使用Kettle的命名参数动态执行作业
  9. PowerDesigner教程系列(五)概念数据模型
  10. python 报价_python基础教程_查询价格
  11. linux里用户权限:~$,/$,~#,/#的区别与含义
  12. 【已解决】华硕电脑关闭触摸板,安装完触摸板驱动,Fn+F9仍然无法解决问题
  13. 海湾汉字编码表全部_海湾5000标准汉字码表设备类型表.xls
  14. matlab 傅里叶变换代码,傅里叶变换的原理及matlab实现.doc
  15. 免驱 usb有线网卡_2020年末台式机amp;笔记本无线网卡最全选购指南amp;攻略,打造极致WIFI体验!...
  16. Google Earth Engine简介
  17. Bailian4108 羚羊数量-Number Of Antelope【递推+打表+递归+记忆化递归】
  18. 【爱思考】CISP证书有效期是几年,到期后怎么办
  19. 微信域名检测php,微信域名检测接口(官方api)——PHP请求示例
  20. 小小知识点(三十七)OFDM和OFDMA的区别以及OFDMA与SC-FDMA的区别

热门文章

  1. CSDN转载别人文章的详细步骤
  2. 【随笔】激活函数是怎样一种存在?
  3. [云炬创业管理笔记]第二章成为创业者讨论2
  4. 科大星云诗社动态20210904
  5. vue在微信里面的兼容问题_vuejs在安卓系统下微信X5内核这个兼容性问题如何破?...
  6. 减小Delphi的Exe文件大小
  7. vs2010 失效后的解决办法
  8. Delphi自动提交网页表单和获取框架网页源码
  9. [转载]项目经理必备工具包:项目管理中的22个思维导图
  10. delphi中的bpl开发注意事项