题目链接:Asteroids - POJ 3041 - Virtual Judge  https://vjudge.net/problem/POJ-3041

第一行输入一个n和一个m表示在n*n的网格里有m个小行星,接下来m行都会有一个小行星的坐标(x,y),现在有一种武器可以一次性把一行或一列上的小行星消灭掉,现在问我们最少要多少次攻击才能消灭所有的小行星。

第一次做二分图最小点覆盖的题目,思路是我们把每一行每一列都抽象成一个点,总共n*n个,行和列的点组成两个点集,那么小行星的坐标(x,y)就是连接点x和点y的线。

水平不行,只能推荐博客(我就是推荐一下博客):

不知道二分图最大匹配和匈牙利算法的同志请点这里:https://www.cnblogs.com/PencilWang/p/5769385.html

不知道最小点覆盖请点这里:https://blog.csdn.net/zjck1995/article/details/50651170

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,k,t,cnt;
int pre[];
int head[];
int vis[];
struct node{
int v,next;
}edge[];
void add(int u,int v)
{
edge[++cnt].v=v;
edge[cnt].next=head[u];
head[u]=cnt;
}
int hungry(int u)
{
for(int i=head[u];i!=-;i=edge[i].next)
{
int v=edge[i].v;
if(vis[v])
continue;
vis[v]=;
if(pre[v]==-||hungry(pre[v]))
{
pre[v]=u;
return true;
}
}
return false;
}
int main()
{
while(cin>>n>>m)
{
memset(head,-,sizeof(head));
cnt=;
memset(pre,-,sizeof(pre));
for(int i=;i<m;i++)
{
int u,v;
cin>>u>>v;
add(u,v);
}
int ans=;
for(int i=;i<=n;i++)
{
memset(vis,,sizeof(vis));
if(hungry(i))
ans++;
}
cout<<ans<<endl;
}
return ;
}

二分图 最小点覆盖 poj 3041的更多相关文章

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

       Asteroids POJ - 3041 Bessie wants to navigate her spaceship through a dangerous asteroid field in ...

  2. [POJ] 2226 Muddy Fields(二分图最小点覆盖)

    题目地址:http://poj.org/problem?id=2226 二分图的题目关键在于建图.因为“*”的地方只有两种木板覆盖方式:水平或竖直,所以运用这种方式进行二分.首先按行排列,算出每个&q ...

  3. POJ2226 Muddy Fields(二分图最小点覆盖集)

    题目给张R×C的地图,地图上*表示泥地..表示草地,问最少要几块宽1长任意木板才能盖住所有泥地,木板可以重合但不能盖住草地. 把所有行和列连续的泥地(可以放一块木板铺满的)看作点且行和列连续泥地分别作 ...

  4. POJ1325 Machine Schedule(二分图最小点覆盖集)

    最小点覆盖集就是在一个有向图中选出最少的点集,使其覆盖所有的边. 二分图最小点覆盖集=二分图最大匹配(二分图最大边独立集) 这题A机器的n种模式作为X部的点,B机器的m种模式作为Y部的点: 每个任务就 ...

  5. hihoCoder #1127:二分图最小点覆盖和最大独立集

    题目大意:求二分图最小点覆盖和最大独立集. 题目分析:如果选中一个点,那么与这个点相连的所有边都被覆盖,使所有边都被覆盖的最小点集称为最小点覆盖,它等于最大匹配:任意两个点之间都没有边相连的最大点集称 ...

  6. HihoCoder1127 二分图三·二分图最小点覆盖和最大独立集

    二分图三·二分图最小点覆盖和最大独立集 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上次安排完相亲之后又过了挺长时间,大家好像都差不多见过面了.不过相亲这个事不是说 ...

  7. 四川第七届 D Vertex Cover(二分图最小点覆盖,二分匹配模板)

    Vertex Cover frog has a graph with nn vertices v(1),v(2),…,v(n)v(1),v(2),…,v(n) and mm edges (v(a1), ...

  8. hihoCoder #1127 : 二分图二·二分图最小点覆盖和最大独立集

    #1127 : 二分图二·二分图最小点覆盖和最大独立集 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 在上次安排完相亲 ...

  9. UVA1194 Machine Schedule[二分图最小点覆盖]

    题意翻译 有两台机器 A,B 分别有 n,m 种模式. 现在有 k 个任务.对于每个任务 i ,给定两个整数$ a_i\(和\) b_i$,表示如果该任务在 A上执行,需要设置模式为 \(a_i\): ...

随机推荐

  1. MFC相关函数汇总(持续汇总跟新中)

    最近有一项关于MFC的任务,做完后总结了一些使用的函数,希望对大家有帮助,也是怕自己忘了所以就写了这篇博客,方便后续的工作. 1,FindWindow() 获得窗口句柄: 2,GetWindowRec ...

  2. 微信小程序request请求封装

    var app = getApp(); function request(url,postData,doSuccess,doFail,doComplete){ var host = getApp(). ...

  3. 03-body标签中相关标签-2

    主要内容: 列表标签 <ul>.<ol>.<dl>表格标签 <table>表单标签 <form> 一.列表标签 列表标签分为三种. 无序列表 ...

  4. Mybatis动态sql及性能优化-3

    内容简介 1.回顾 2.动态sql 3.性能优化 懒加载机制 一级缓存 二级缓存 一.回顾 1.config文件常用标签 properties标签:引入外部properties文件资源. settin ...

  5. Oracle分区表常见操作

    Oracle分区表常用于业务中大表使用,如历史交易记录表等,提高表记录查询效率.本文主要描述范围分区表的创建.新增以及索引创建. Oracle操作分区表相关信息 显示数据库所有分区表的信息:DBA_P ...

  6. C语言中插入汇编nop指令

    工作过程中,有的时候需要打桩cycle,想在C语言中插入nop指令,可以采取的方法是 头文件中加入#inlude <stdio.h> 定义一个内联函数,然后调用这个函数,不过得测一下平台调 ...

  7. tomcat 简单安装配置说明

    1.下载安装文件[apache-tomcat-6.0.41.tar.gz]到指定目录[/usr/local]2.解压文件[tar -zxvf apache-tomcat-6.0.41.tar.gz], ...

  8. asp.net控件中的reportview不显示

    如果reportview在asp.net中,图标出不来,打X 1.安装reportview控件(在装有vs2010中的电脑中搜,不要去下载,下载可能会出错) 2.如果是iis7以上版本,web.con ...

  9. C# Liseview的使用方法之一:滚动到选中的行

    listview.items[i].EnsureVisible();//滚动到你想要显示出来的行上. 其中,listview.items[i]就是你想要显示的行.

  10. Java学习04 (第一遍)

    封装.抽象.继承和多态.封装:在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,sex,age等属 ...