点击打开链接

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. SpringMVC + Spring + MyBatis 学习笔记:遭遇order by 排序问题

    系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 用MyBatis写排序 ...

  2. java多线程之Lock线程同步

    1.线程同步: package cn.itcast.heima2; import java.util.concurrent.locks.Lock; import java.util.concurren ...

  3. 轻松学习Linux系统安装篇之fdisk命令行工具的使用

    fdisk 的介绍:          fdisk 命令是磁盘分区表操作工具:和以前Dos和windows下的分区工具功能一样:fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统 ...

  4. openstack network

  5. Hadoop开发环境简介(转)

    1.Hadoop开发环境简介 1.1 Hadoop集群简介 Java版本:jdk-6u31-linux-i586.bin Linux系统:CentOS6.0 Hadoop版本:hadoop-1.0.0 ...

  6. Hadoop概念学习系列之hadoop生态系统闲谈(二十五)

    分层次讲解 最底层平台 ------->hdfs  yarn  mapreduce spark 应用层-------->hbase  hive   pig   sparkSQL    nu ...

  7. 应用引擎BAE3.0(转)

    add by zhj: 其实我主要是想看看基于docker的PaaS的特性. 原文:http://developer.baidu.com/wiki/index.php?title=docs/cplat ...

  8. UNITY3D MAC版本破解

    百度网盘下载地址: http://pan.baidu.com/s/1eQmvLqa#path=%252F 包含本体和破解文件 首先说明一下,如果是公司做开发建议去购买正版. 之前网上也有很多人贴出了破 ...

  9. index structure

    1. wordlist 0) 0, 1byte 1) token-id(delta), 8byte 2) doclist-offset(delta), 8byte 3) doc_count, 4byt ...

  10. 主题敏感词PageRank

    [主题敏感词PageRank] PageRank忽略了主题相关性,导致结果的相关性和主题性降低,对于不同的用户,甚至有很大的差别.例如,当搜索“苹果”时,一个数码爱好者可能是想要看 iphone 的信 ...