点击打开链接

Konig定理:二分图的最小顶点覆盖数 = 二分图的最大匹配数

题意: 在N*N的网络中有K颗小行星。小行星i的位置是(Ri, Ci)。如今有一个强力的武器可以用一发光束将一整行或一整列的小行星消灭。想要利用这个武器消灭全部的小行星最少须要几发光束?

分析: 以小行星的左右坐标建立二分图,就能够看出是求二分图的最小顶点覆盖数。

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std; const int maxn = 500 + 5; //单側顶点的最大数目 struct BPM{
int n, m; //左右顶点个数
vector<int> G[maxn]; //邻接表
int left[maxn];//left[i]为右边第i个点的匹配点编号,-1表示不存在
bool T[maxn];//T[i]为右边第i个点是否已标记 int right[maxn]; //求最小覆盖用
bool S[maxn]; //求最小覆盖用 void init(int n, int m){
this->n = n;
this->m = m;
for(int i=0; i<n; ++i) G[i].clear();
} void AddEdge(int u, int v){
G[u].push_back(v);
} bool match(int u){
S[u] = true;
for(int i=0; i<G[u].size(); ++i){
int v = G[u][i];
if(!T[v]){
T[v] = true;
if(left[v]==-1 || match(left[v])){
left[v] = u;
right[u] = v;
return true;
}
}
}
return false;
} //求最大匹配
int solve()
{
memset(left, -1, sizeof left );
memset(right, -1, sizeof right );
int ans = 0;
for(int u=0; u<n; ++u){
//从左边结点u開始增广
memset(S, 0, sizeof S );
memset(T, 0, sizeof T );
if(match(u)) ans++;
}
return ans;
}
//求最小覆盖。 X 和 Y为最小覆盖中的点集
int mincover(vector<int>& X, vector<int>& Y){
int ans = solve();
memset(S, 0, sizeof S );
for(int u =0; u<n; ++u)
if(right[u]==-1) match(u);
//从全部X未盖点出发增广
for(int u=0; u<n; ++u)
if(!S[u]) X.push_back(u); //X中的未标记点
for(int v=0; v<m; ++v)
if(T[v]) Y.push_back(v); //Y中的已标记点
return ans;
}
}; BPM solver;
int main()
{
int i, j, n, k;
scanf("%d%d", &n, &k);
solver.init(n, n);
for(i=0; i<k; ++i)
{
int x, y;
scanf("%d%d", &x, &y);
x--; y--;
solver.AddEdge(x, y); //有向图
}
int ans = solver.solve();
printf("%d\n", ans);
return 0;
}

poj3041-Asteroids , 二分图的最小顶点覆盖数 = 最大匹配数的更多相关文章

  1. [poj3041]Asteroids(二分图的最小顶点覆盖)

    题目大意:$N*N$的网格中有$n$颗行星,若每次可以消去一整行或一整列,求最小的攻击次数使得消去所有行星. 解题关键:将光束当做顶点,行星当做连接光束的边建图,题目转化为求该图的最小顶点覆盖,图的最 ...

  2. HDU1054Strategic Game(最小顶点覆盖数)

    我们来先了解一下什么是最小顶点覆盖: 图G的顶点覆盖是一个顶点集合V,使得G中的每一条边都接触V中的至少一个顶点.我们称集合V覆盖了G的边.最小顶点覆盖是用最少的顶点来覆盖所有的边.顶点覆盖数是最小顶 ...

  3. poj3041 Asteroids 匈牙利算法 最小点集覆盖问题=二分图最大匹配

    /** 题目:poj3041 Asteroids 链接:http://poj.org/problem?id=3041 题意:给定n*n的矩阵,'X'表示障碍物,'.'表示空格;你有一把枪,每一发子弹可 ...

  4. POJ3041 Asteroids(二分图最小点覆盖)

    Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape o ...

  5. POJ3041 Asteroids(二分图最大匹配)

    题目链接. 分析: 暂略. AC代码: #include <iostream> #include <cstdio> #include <cstring> #incl ...

  6. POJ3041 Asteroids 二分图匹配 匈牙利算法

    原文链接http://www.cnblogs.com/zhouzhendong/p/8229200.html 题目传送门 - POJ3041 题意概括 有一个n*n的矩阵,有些点是障碍物. 现在每次可 ...

  7. HDU 2444 The Accomodation of Students (二分图存在的判定以及最大匹配数)

    There are a group of students. Some of them may know each other, while others don't. For example, A ...

  8. poj3041 Asteroids(二分图最小顶点覆盖、二分图匹配)

    Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape o ...

  9. POJ-1325 Machine Schedule 二分图匹配 最小点覆盖问题

    POJ-1325 题意: 有两台机器A,B,分别有n,m种模式,初始都在0模式,现在有k项任务,每项任务要求A或者B调到对应的模式才能完成.问最少要给机器A,B调多少次模式可以完成任务. 思路: 相当 ...

随机推荐

  1. C#获取ftp文件最后修改时间

    public static DateTime GetFileModifyDateTime(string ftpServerIP,string ftpFolder,string ftpUserID,st ...

  2. Java NIO 操作总结

    问题: 1.Java NIO 出现大量CLOSE_WAIT或TIME_WAIT的端口无法释放 CLOSE_WAIT: 参考:http://my.oschina.net/geecoodeer/blog/ ...

  3. x-debug配置简述 - chunyu

    一 x-debug 是什么?在配置之前,先解决一个问题,x-debug 是什么?我也不查标准答案了,就说说个人理解.x-debug是一个PHP调试工具,帮助开发者在IDE里面进行代码的断点调试,效果如 ...

  4. eCryptfs文件系统测试

    650) this.width=650;" onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" ...

  5. 山东意外险风险信息推送V7非车

    <?xml version="1.0" encoding="GBK"?><Packet type="REQUEST" ve ...

  6. mysql编码详解

    在开发程序的时候,我们使用mysql数据库开发的时候,有时会碰到自己明明输入的是中文,为什么数据库中存储的就是???? 1.在配置Connection URL时,加上?useUnicode=true& ...

  7. ubuntu 64位系统下加速Android模拟器

    安装KVM: sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils 在Postfix Configurati ...

  8. 实时监控mysql数据库变化

    对于二次开发来说,很大一部分就找找文件和找数据库的变化情况 对于数据库变化.还没有发现比较好用的监控数据库变化监控软件. 今天,我就给大家介绍一个如何使用mysql自带的功能监控数据库变化 1.打开数 ...

  9. 如何让ASP.NET网站站点不停止 永远持续运行

    转载自  http://www.cnblogs.com/insus/p/3658752.html 在公司内部服务器,运行很多网站(应用程序),但每个网站都有自动化或是定时执行的事务.后来经整合,所有这 ...

  10. HDU1007最近点对(分治)

    http://acm.hdu.edu.cn/showproblem.php?pid=1007 直接见代码吧.不过这个是N*logN*logN的 尽管如此,我怎么感觉我的比他们的还快??? #inclu ...