UVa11419 SAM I AM

2024-05-15 02:36
文章标签 sam uva11419

本文主要是介绍UVa11419 SAM I AM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UVa11419 SAM I AM

  • 题目链接
  • 题意
  • 分析
  • AC 代码

题目链接

   UVA - 11419 SAM I AM

题意

   给出一个 R×C 大小的网格,网格上面放了一些目标。可以在网格外发射子弹,子弹会沿着垂直或者水平方向飞行,并且打掉飞行路径上的所有目标,如下图所示。你的任务是计算出最少需要多少子弹,各从哪些位置发射,才能把所有目标全部打掉。
SAM I AM

分析

   求二分图最大匹配,可得第一部分答案:最小覆盖数。
   说一下求覆盖点方案的思路:首先可知,从所有匹配点中选出一半作为覆盖点即可,未匹配点不选作覆盖点(当然,不是说未匹配点一定不能作为覆盖点,而是在求出一个最大匹配后,从所有匹配点中选一半作为覆盖点一定是可行解)。从未匹配点u入手,如果u连有边(u,v),说明v一定是覆盖点,那么对于和v相连的其他边(v,w),w不是覆盖点,然后需要继续这样对点w分析,这是一个dfs拓展匈牙利树的过程。
   总结一下:从所有X点集的未匹配点出发做dfs扩展匈牙利树,标记树中的所有点,则X中的未标记点和Y中的已标记点组成了所求的最小覆盖点集。

AC 代码

#include <iostream>
#include <cstring>
using namespace std;#define N 1005
int g[N][N], c[N], dx[N], dy[N], px[N], py[N], vis[N], q[N], m, nx, ny, clk, d, INF = N<<1; bool f[N];bool search() {memset(dx, -1, sizeof(dx)); memset(dy, -1, sizeof(dy)); d = INF;int head = 0, tail = 0;for (int i=1; i<=nx; ++i) if (px[i] < 0) q[tail++] = i, dx[i] = 0;while (head < tail) {int u = q[head++];if (dx[u] > d) break;for (int i=0, v; i<c[u]; ++i) if (dy[v = g[u][i]] < 0) {dy[v] = dx[u] + 1;py[v] < 0 ? d = dy[v] : (dx[py[v]] = dy[v] + 1, q[tail++] = py[v]);}}return d != INF;
}bool dfs(int u) {for (int i=0, v; i<c[u]; ++i) if (vis[v = g[u][i]] != clk && dy[v] == dx[u]+1) {vis[v] = clk;if (py[v] >= 0 && dy[v] == d) continue;if (py[v] < 0 || dfs(py[v])) {px[u] = v; py[v] = u;return true;}}return false;
}int max_match() {memset(px, -1, sizeof(px)); memset(py, -1, sizeof(py)); memset(vis, -1, sizeof(vis));int cc = clk = 0;while (search()) {++clk;for (int i=1; i<=nx; ++i) if (px[i] < 0 && dfs(i)) ++cc;}return cc;
}void dfs2(int u) {f[u] = 1;for (int i=0, v; i<c[u]; ++i) if (!vis[v = g[u][i]]) {vis[v] = 1;if (!f[py[v]]) dfs2(py[v]);}
}void solve() {memset(c, 0, sizeof(c));while (m--) {int u, v; cin >> u >> v; g[u][c[u]++] = v;}cout << max_match();memset(f, 0, sizeof(f)); memset(vis, 0, sizeof(vis));for (int i=1; i<=nx; ++i) if (px[i] < 0) dfs2(i);for (int i=1; i<=nx; ++i) if (!f[i]) cout << " r" << i;for (int i=1; i<=ny; ++i) if (vis[i]) cout << " c" << i;cout << endl;
}int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);while (cin >> nx >> ny >> m && (nx || ny || m)) solve();return 0;
}

这篇关于UVa11419 SAM I AM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990568

相关文章

【LVI-SAM】激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节

激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节 1. 特征提取实现过程总结1.0 特征提取过程小结1.1 类 `FeatureExtraction` 的整体结构与作用1.2 详细特征提取的过程1. 平滑度计算(`calculateSmoothness()`)2. 标记遮挡点(`markOccludedPoints()`)3. 特征提取(`extractF

Segment Anything Model(SAM)中的Adapter是什么?

在META团队发布的Segment Anything Model (SAM) 中,Adapter 是一种用于提升模型在特定任务或领域上的性能的机制。具体来说,SAM 是一个通用的分割模型,能够处理多种不同类型的图像分割任务,而 Adapter 的引入是为了更好地让模型适应不同的任务需求。 Adapter 的主要功能是: 模块化设计:Adapter 是一种小规模的、可插拔的网络模块,可以在不改

SAM 2: The next generation of Meta Segment Anything Model for videos and images

https://ai.meta.com/blog/segment-anything-2/  https://github.com/facebookresearch/segment-anything-2  https://zhuanlan.zhihu.com/p/712068482

【论文解读】SAM模型超级进化:面向移动端的轻量级SAM,比FastSAM快4倍!(附论文地址)

论文地址:https://arxiv.org/pdf/2306.14289.pdf 这篇论文的标题是《FASTER SEGMENT ANYTHING: TOWARDS LIGHTWEIGHT SAM FOR MOBILE APPLICATIONS》,由Chaoning Zhang等人撰写,发表于2023年。 文章主要探讨了如何将Segment Anything Model(SAM)优化

Sam Grant强势加盟FAF:强强联合,方能所向披靡

区块链技术发展正夯,它的飞速革新与进步为整个互联网,乃至所有新兴领域的发展和进步都提供了不竭动力。而其中的CDN网络,在缓解网络拥堵,提高互联网业务相应度,改善用户体验等方面都具有深远的意义。  CDN的分布式概念与区块链的“去中心化”不谋而合,两者之间有着天然的吻合性。因此,CDN是极为适合区块链的落地应用场景。将区块链技术搭载于CDN加速服务器中,就可以量化用户对于资源的贡献,同时,区块链还

LIO-SAM: 紧耦合的激光与惯导里程计方案

点云PCL免费知识星球,点云论文速读。 标题:LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping 作者:Tixiao Shan, Brendan Englot, Drew Meyers, Wei Wang, Carlo Ratti, and Daniela Rus 来源:分享者 欢迎各位加入免费知识

SAM 2——视频和图像实时实例分割的全新开源模型

引言 源码地址:https://github.com/facebookresearch/segment-anything-2 过去几年,人工智能领域在文本处理的基础人工智能方面取得了显著进步,这些进步改变了从客户服务到法律分析等各个行业。然而,在图像处理方面,我们才刚刚开始。视觉数据的复杂性以及训练模型以准确解释和分析图像的挑战带来了重大障碍。随着研究人员继续探索图像和视频的基础人工智能,人工智

微软正在推动 OpenAI 转变为营利性公司!Sam Altman 或拥有更多股权 股东也“逼宫”保时捷

目前,OpenAI估值为860亿美元,转型为营利性公司或加速OpenAI IPO,微软及其他投资者认为,若 Altman拥有更多股权,可能就不会那么有动力专注于其他项目和投资其他AI公司。 根据The Information最新报道,Sam Altman最近告诉一些股东,OpenAI正在考虑将其治理结构转变为一家营利性企业,OpenAI的非营利董事会无法控制该企业。 Altman还表示,董事会

企业软件商城:SAM解决方案中的关键角色(应该怎么做)

1.厘清对SAM的认知 1.1.SAM的权威理解 软件资产管理(Software Asset Management,简称SAM)是指通过制定和实施政策、流程和工具来有效管理、控制和保护组织的软件资产。SAM不仅仅是简单的资产盘点,还涉及到软件从采购、部署、使用到退役整个生命周期的管理。其核心目标是确保软件资产的高效利用、合规性和成本效益。 1.2. 软件资产管理能力成熟度模型评估 SAM能力