博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-3041 行列匹配构图+最小顶点覆盖
阅读量:5966 次
发布时间:2019-06-19

本文共 1145 字,大约阅读时间需要 3 分钟。

题意:给定一个网格,现在某些格子坐标中有一个小行星,现有一种武器能够击穿一行或者是一列的小行星,问最少使用多少次这种武器能够销毁所有的小行星。

解法:由于每一个点只要被行或者列覆盖到就可以,因此可以将某一点所在的行和列进行匹配,问题就转化为求一个最小顶点覆盖就可以了,因为这样能够保证每一条边都有一个顶点在点集内。也即每个小行星都能够被所在的行或者是所在的列覆盖到。

代码如下:

#include 
#include
#include
#include
#include
using namespace std;int N, M;char G[505][505], vis[505];int match[505];int path(int u) { for (int i = 1; i <= N; ++i) { if (!G[u][i] || vis[i]) continue; vis[i] = 1; if (!match[i] || path(match[i])) { match[i] = u; return 1; } } return 0;}int query() { int ret = 0; memset(match, 0, sizeof (match)); for (int i = 1; i <= N; ++i) { memset(vis, 0, sizeof (vis)); ret += path(i); } return ret;} int main() { int a, b; while (scanf("%d %d", &N, &M) != EOF) { for (int i = 0; i < M; ++i) { scanf("%d %d", &a, &b); G[a][b] = 1; // 行列匹配构图,最后求一个最小顶点覆盖 } printf("%d\n", query()); } return 0; }

 

转载于:https://www.cnblogs.com/Lyush/archive/2013/04/08/3008625.html

你可能感兴趣的文章
移动Web—CSS为Retina屏幕替换更高质量的图片
查看>>
[Linux 性能检测工具]SAR
查看>>
JS 运行、复制、另存为 代码。
查看>>
一个经典编程面试题的“隐退”
查看>>
阿里公共DNS 正式发布了
查看>>
Java抓取网页数据(原网页+Javascript返回数据)
查看>>
EasyUI基础入门之Pagination(分页)
查看>>
ORACLE中CONSTRAINT的四对属性
查看>>
python 迭代器 生成器
查看>>
dorado基本事件样例
查看>>
Python访问PostGIS(建表、空间索引、分区表)
查看>>
quick-cocos2d-x开发环境Lua for IntelliJ IDEA的安装
查看>>
Target-Action回调模式
查看>>
换个红圈1微信头像恶搞一下好友
查看>>
Socket网络编程--简单Web服务器(3)
查看>>
ylbtech_dbs_article_五大主流数据库模型
查看>>
Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll
查看>>
10行Python代码解决约瑟夫环(模拟)
查看>>
一个简单好用的日志框架NLog
查看>>
超级硬盘数据恢复软件 4.6.5.0注冊码破解版
查看>>