http://poj.org/problem?id=3041

在n*n的网格中有K颗小行星,小行星i的位置是(Ri,Ci),现在有一个强有力的武器能够用一发光速将一整行或一整列的小行星轰为灰烬,想要利用这个武器摧毁所有的小行星最少需要几发光束.

主要是构图,将每一行当成一个点,构成集合1,每一列也当成一个点,构成集合2,每一个障碍物的位置坐标将集合1和集合2的点连接起来,也就是将每一个障碍物作为连接节点的边,这样可以得出本题是一个最小点覆盖的问题==二分图的最大匹配.

就可以通过匈牙利算法求解。

邻接表实现 0ms.

 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
class edge{
public:
int v,nex;
};
edge e[];
int n,m,k,head[];
int link[];
bool vis[]; void init()
{
k=;
memset(head,,sizeof(head));
}
void addedge(int b,int a)
{//向图中加边的算法,注意加上的是有向边//b为a的后续节点既是a---->b
e[k].v=a;
e[k].nex=head[b];
head[b]=k;k++;
}
bool dfs(int u){
for(int i = head[u]; i != ; i = e[i].nex){
int v = e[i].v;
if(!vis[v]){
vis[v] = true;
if(link[v] == - || dfs(link[v])){
link[v] = u;
return true;
}
}
}
return false;
}
int main()
{
int u,v;
scanf("%d%d",&n,&m);
init();
for(int i=;i<m;i++)
{
scanf("%d%d",&u,&v);
addedge(v-,u-);
}
int ans=;
memset(link,-,sizeof(link));
for(int i = ; i < n; i ++){
memset(vis,,sizeof(vis));
if(dfs(i)) ans++;
}
printf("%d\n", ans);
return ;
}

邻接矩阵:

 #include <cstdio>
#include <cstring>
const int MAXN=;
int uN,vN; //u,v数目
int g[MAXN][MAXN];//编号是0~n-1的
int linker[MAXN];
bool used[MAXN];
bool dfs(int u)
{
int v;
for(v=;v<uN;v++)
if(g[u][v]&&!used[v])
{
used[v]=true;
if(linker[v]==-||dfs(linker[v]))
{
linker[v]=u;
return true;
}
}
return false;
}
int hungary()
{
int res=;
int u;
memset(linker,-,sizeof(linker));
for(u=;u<uN;u++)
{
memset(used,,sizeof(used));
if(dfs(u)) res++;
}
return res;
} int main()
{
int u,v;
scanf("%d%d",&uN,&vN);
memset(g,,sizeof(g));
while(vN--)
{
scanf("%d%d",&u,&v);
g[u-][v-]=;
}
printf("%d\n",hungary());
return ; }

poj - 3041 Asteroids (二分图最大匹配+匈牙利算法)的更多相关文章

  1. 【网络流#6】POJ 3041 Asteroids 二分图最大匹配 - 《挑战程序设计竞赛》例题

    学习网络流中ing...作为初学者练习是不可少的~~~构图方法因为书上很详细了,所以就简单说一说 把光束作为图的顶点,小行星当做连接顶点的边,建图,由于 最小顶点覆盖 等于 二分图最大匹配 ,因此求二 ...

  2. 二分图最大匹配(匈牙利算法) POJ 3041 Asteroids

    题目传送门 /* 题意:每次能消灭一行或一列的障碍物,要求最少的次数. 匈牙利算法:把行和列看做两个集合,当有障碍物连接时连一条边,问题转换为最小点覆盖数==二分图最大匹配数 趣味入门:http:// ...

  3. poj 3041 Asteroids (最大匹配最小顶点覆盖——匈牙利模板题)

    http://poj.org/problem?id=3041 Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  4. poj 3041 Asteroids (二分图的最大匹配 第一题)

    题目:http://poj.org/problem?id=3041 题意:在某个n*n的空间内,分布有一些小行星,某人在里面打炮,放一枪后某一行或某一列的行星就都没了,让求最少的打炮数. 然后把每行x ...

  5. POJ 3041 Asteroids 二分图之最大匹配

    题意:在一个网格中有若干个点,每一次可以清除一行或者一列,问最少几次可以将网格中的点全部清除. 思路:这个题是一个入门的最大匹配题(这个好像不是思路..).一般的方式就是将 行 看作集合A,列 看作集 ...

  6. 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement

    题目传送门 /* 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 */ #include ...

  7. poj 3894 System Engineer (二分图最大匹配--匈牙利算法)

    System Engineer Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 507   Accepted: 217 Des ...

  8. POJ 3041 Asteroids 二分图

    原题连接:http://poj.org/problem?id=3041 Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  9. UESTC 919 SOUND OF DESTINY --二分图最大匹配+匈牙利算法

    二分图最大匹配的匈牙利算法模板题. 由题目易知,需求二分图的最大匹配数,采取匈牙利算法,并采用邻接表来存储边,用邻接矩阵会超时,因为邻接表复杂度O(nm),而邻接矩阵最坏情况下复杂度可达O(n^3). ...

随机推荐

  1. (五)Mybatis总结之一对多、一对一

    一对多 业务场景:张三既是java开发师又是大学老师又是LOL代练,张三拥有多个角色. 1.创建实体类UserInfo和RoleInfo package com.qf.mybatisdemo.pojo ...

  2. 微信小程序button授权页面,用户拒绝后仍可再次授权

    微信小程序授权页面,进入小程序如果没授权跳转到授权页面,授权后跳转到首页,如果用户点拒绝下次进入小程序还是能跳转到授权页面,授权页面如下 app.js  中的 onLaunch或onShow中加如下代 ...

  3. Hadoop YARN学习之核心概念(2)

    Hadoop YARN学习之核心概念(2) 1. Hadoop 2.X YARN引入的新服务 1.1 新的ResourceManager纯碎作为资源调度器,是集群资源的唯一仲裁者: 1.2 用户应用程 ...

  4. 锐动SDK应用于行车记录仪

    方案架构 手机端直播与录播功能忠实记录旅途中各种突发事件,还原事实真相,与家人和朋友分享沿途美景,一同感受美妙之旅. 强大的视频编辑功能,像编辑图片一样给视频添加各种滤镜,配音,配乐,标题文字等特效. ...

  5. SQL Server性能调优——报表数据库与业务数据库分离

    前段时间把公司的主数据库切了,分成业务库和报表库,业务库向报表库进行实时的Replication.这个项目的上线提升了系统的性能和可维护性,现在把设计时的考量和所做的工作重新回顾一下,作为备忘. 项目 ...

  6. 看到了一篇不错的tensorflow文章

    http://dataunion.org/28906.html 本文作者 Steven Dufresne,总结了新手学 TensorFlow 需要的核心知识点和实操内容,旨在鼓励更多人借 Tensor ...

  7. PHP会话控制考察点

    为什么要使用会话控制技术 HTTP协议是无状态的,也就是说HTTP没有一个内建的机制来维护两个事务之间的状态.当一个用户完成一个请求发起第二个请求的时候,服务器无法知道这次请求是来自于上一次的客户.而 ...

  8. Java8新特性 Stream流式思想(一)

    遍历及过滤集合中的元素使用传统方式遍历及过滤集合中的元素package cn.com.zq.demo01.Stream.test01.Stream; import java.util.ArrayLis ...

  9. 用cesium本身添加水纹效果

    参考网站:https://blog.csdn.net/XLSMN/article/details/78752669 1.首先来看一下整体效果 2.具体方法如下: 首先,你必须有两张很重要的图片,你可以 ...

  10. QTreeWidgetItem和QTreeWidgetItemIterator

    1.{ ui->treeWidget->setHeaderHidden(true); ui->treeWidget->clear(); QTreeWidgetItem *ima ...