这是一道二分匹配题,根据Konig定理:最大匹配数=最小覆盖数;

这里我们以行为左边,以列为右边建图,这样建好后,就是一个裸的二分匹配;

View Code

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<cstring>
#include<vector>
using namespace std;
bool G[524][524],visit[524];
int match[524];
bool path( int num ,int N )
{for( int i = 1 ; i <= N ; i++ ){if( !visit[i] && G[num][i]  ){visit[i] = true;if( match[i]==0 || path( match[i] ,N ) ){match[i] = num;return true;}    }        }return false;
}
int main(  )
{int N,R,x,y;while( scanf( "%d %d",&N,&R ) ==2){int ans = 0;memset( G , 0 , sizeof( G ) );memset( match , 0 , sizeof( 0 ) );for( int i = 1 ; i <= R ; i++ ){scanf( "%d %d",&x,&y );G[x][y] = true;    }for( int i = 1 ; i <= N ; i ++ ){memset( visit , 0 , sizeof( visit ) );if( path( i ,N ) )ans++;    }    printf( "%d",ans );}//system( "pause" );return 0;
}

转载于:https://www.cnblogs.com/bo-tao/archive/2012/07/04/2576213.html

poj 3041 Asteroids相关推荐

  1. POJ 3041 Asteroids (对偶性,二分图匹配)

    题目:POJ 3041 Asteroids http://poj.org/problem?id=3041 分析: 把位置下标看出一条边,这显然是一个二分图最小顶点覆盖的问题,Hungary就好. 挑战 ...

  2. POJ - 3041 Asteroids 二分图最小点覆盖

    题目链接 二分图一个很重要的定理:看了很多大神的博客表示看不懂为什么,以后再看 最小点覆盖=最大匹配 最小点覆盖就是在二分图里边,选择一个点,将所有与该点相链接的边删去,问最小找多少个点能够把所有的边 ...

  3. POJ 3041 Asteroids(最小点覆盖)题解

    题意:n*n的网格中有k个点,开一枪能摧毁一行或一列的所有点,问最少开几枪 思路:我们把网格看成两个集合,行集合和列集合,如果有点x,y那么就连接x->y,所以我们只要做最小点覆盖就好了. 参考 ...

  4. POJ 3041 Asteroids 二分图匹配

    以行列为点建图,每个点(x,y) 对应一条边连接x,y.二分图的最小点覆盖=最大匹配 //#pragma comment(linker, "/STACK:1024000000,1024000 ...

  5. POJ - 3041 Asteroids(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目分析:给出一个n*n的矩阵,其中有m个敌人,每一次操作可以清除某一列或某一行中的所有敌人,问若想清除所有敌人,至少需要多少次操作 题目分析:第一次见这种题,就是最小覆盖是要用最 ...

  6. POJ 3041 Asteroids (最小顶点覆盖)

    题目类型  最小顶点覆盖 题目意思 给出最多10000个点的坐标 每次可以消除同一行的点或同一列的点 问至少要多少次才能把所有点都消除掉 解题方法 首先建图 每一个行号为一个点 每一个列号为一个点 那 ...

  7. POJ T3041 Asteroids

    POJ T3041 Asteroids 题解: 如果没学过匈牙利算法的话,鄙人感觉会去暴力. 匈牙利算法已经有很好的博客了,鄙人就不在这赘述了. 代码: #include<cstdio> ...

  8. 【POJ - 3041】Asteroids (二分图,最小点覆盖)

    题干: Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x ...

  9. 【POJ 3041】Asteroids (最小点覆盖)

    每次选择清除一行或者一列上的小行星.最少选择几次. 将行和列抽象成点,第i行为节点i+n,第j列为节点j,每个行星则是一条边,连接了所在的行列. 于是问题转化成最小点覆盖.二分图的最小点覆盖==最大匹 ...

最新文章

  1. matlab中find函数使用
  2. 磁铁驱动反向续流串接电阻的的分析
  3. 《LeetCode力扣练习》第136题 只出现一次的数字 Java
  4. opencv相机标定
  5. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)
  6. sqlserver int转varchar_SQL server 常用数据类型讲解
  7. 如何将图片序列化_PS如何将图片制作成gif动态图 ps制作gif动态图教程
  8. 华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)
  9. android module 加载.so,关于Android Studio主Module与依赖Module同时引入so库的问题
  10. word 文字超出表格边框怎么办
  11. linux crontab 定时任务解析
  12. 路畅安卓最新固件升级_最新大众路畅1.51固件刷机包
  13. django+layui图片上传(用户头像修改,实时预览)
  14. 写一个AndroidStudio有道翻译插件给大家
  15. 我爱淘二次冲刺阶段6
  16. 5G 理论峰值速率是怎么计算的?
  17. 如何使用Python解锁星河远征军的科幻旅途
  18. cannot connect to X server
  19. Adding items to hidden net GND
  20. 学习笔记16 window service 服务的相关内容

热门文章

  1. 不连续曲线 highcharts_什么是正则曲线和正则曲面
  2. Golang——多种运算符及优先级
  3. 修改wap游戏服务器,修改wap游戏服务器
  4. 安卓文本编辑器php cpp,开源的Android富文本编辑器
  5. matlab实现浮点转定点,浮点转定点方法总结.doc
  6. n个骰子的点数 java_n个骰子的点数和为s的概率集合输出(Java)
  7. C++ 读取文件操作
  8. 产品经理需要掌握的9种共性推荐策略
  9. 匿名内部类属于局部内部类吗_内部类详解————匿名内部类
  10. 分布式数据库在金融应用场景中的探索与实践