【还在Hungary?你Out了~】
今天上午被下面这道题虐了很久..完全没想到是二分图。
迷宫
根据藏宝地图,cj的科学家们找到了藏宝地点,但却发现入口有多个,谁都没敢冒然进入。于是大家停下脚步,想应该从哪一个门进入。突然,图形学家Mercury发现了隐藏在藏宝地图上的秘密,果然有意识呀!他发现,这个地图在暗处时会显现出一个有向无环图(至于为什么有向,我想是因为某种特殊作用力的缘故吧。),而这个图正是这个迷宫的地图。幸亏没有冒然进入,要不然就出不来了。
但是这个地图却没说出口在哪里,哎,只好用Jupiter的超级机器人进洞寻找了。每一个入口将把机器人瞬间传送到对应编号的点(所有点都能到达),为了不让Jupiter同学失去太多他心爱的机器人,我们必须用最少的机器人去搜索每个点(每个点只能被经过一次)。
输入
第一行两个数n、m,分别表示地图的点数和边数,接下来m行,每行两个数u、v,表示有一条从点u到点v的有向边。
输出
只有一个数,表示最少要用的机器人数。
输入样例
3 2
1 2
2 3
输出样例
1
数据范围
n<=200000
m<=500000
被邓大牛点醒,一看, 啊,还真是,只是这数据范围...
于是开始学习Hopcroft Karp
说起来其实也不难,
回想我们在做Hungary的时候,每次只增广一条路,如何优化呢?很简单,就是一次多增广。
流程如下:
①BFS找出极短增广路集,当最短增广路集为∅时退出