当前位置: 首页 > news >正文

UVa658 It’s not a Bug, it’s a Feature!(Dijkstra)

题意

给出一个包含n个bug的应用程序,以及m个补丁,每个补丁使用两个字符串表示,第一个串表示补丁针对bug的情况,即哪些bug存在,以及哪些bug不存在,第二个串表示补丁对bug的修复情况,即修复了哪些bug,以及引入哪些bug。补丁还包含修复的时间。问修复这些bug所需要的最短时间

思路

使用Dijkstra算法,使用n表示bug数,bug数限制在20内,初始n个bug全存在,即源点为1<<n-1,在从优先级队列中取出最短时间节点时,遍历补丁,根据当前补丁的情况以及修复情况来展开新的节点,同时将新节点放入优先级队列中,最后看目标点为0时的距离

代码

#include <bits/stdc++.h>using namespace std;#define _for(i, a, b) for(int i = (a); i < (b); i++)
#define _rep(i, a, b) for (int i = (a); i <= (b); i++)struct Edge
{int from, to, dist;
};struct HeapNode
{int u, d;bool operator<(const HeapNode& other) const{return d > other.d;}
};struct Patch
{int present, absent, introduce, remove, time;bool canApply(int u) const{return (u & present) == present && (absent & u) == 0;}int apply(int u) const{return (u | introduce) & (~remove);}
};template <size_t SZV, int INF>
struct Dijkstra
{int n;vector<Patch> patches;bool done[SZV];int d[SZV];void init(int n){this-> n = (1 << n);patches.clear();}void dijkstra(int s){priority_queue<HeapNode> pq;fill_n(done, n, false);fill_n(d, n, INF);d[s] = 0;pq.push({s, 0});while (!pq.empty()) {HeapNode curNode = pq.top();pq.pop();int u = curNode.u;if (done[u]) {continue;}done[u] = true;_for(i, 0, patches.size()) {const Patch& p = patches[i];if (!p.canApply(u)) {continue;}int v = p.apply(u);if (d[v] > d[u] + p.time) {d[v] = d[u] + p.time;pq.push({v, d[v]});}}}}
};void fastio()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
}const int MAXN = 20;
const int MAXV = (1 << MAXN) + 4;
const int INF = 1e9;int n, m;void toInt(const string& s, int& i1, int& i2)
{i1 = i2 = 0;_for(i, 0, n) {if (s[i] == '+') {i1 |= (1 << i);}if (s[i] == '-') {i2 |= (1 << i);}}
}Dijkstra<MAXV, INF> solver;int main()
{fastio();#ifndef ONLINE_JUDGEifstream fin("f:\\OJ\\uva_in.txt");streambuf* back = cin.rdbuf(fin.rdbuf());#endifint kase = 1;while (cin >> n >> m) {if (n == 0 && m == 0) {break;}//cout << "n:" << n << " m:" << m << endl;solver.init(n);string buf1, buf2;Patch patch;_for(i, 0, m) {cin >> patch.time >> buf1 >> buf2;toInt(buf1, patch.present, patch.absent);toInt(buf2, patch.introduce, patch.remove);solver.patches.push_back(patch);}/*for (int i = 0; i < solver.patches.size(); i++) {const Patch& patch = solver.patches[i];cout << patch.present << " " << patch.absent << " " << patch.introduce << " " << patch.remove << endl;}*/solver.dijkstra(solver.n - 1);cout << "Product " << kase++ << endl;if (solver.d[0] == INF) {cout << "Bugs cannot be fixed." << endl;} else {cout << "Fastest sequence takes " << solver.d[0] << " seconds." << endl;}cout << endl;}#ifndef ONLINE_JUDGEcin.rdbuf(back);#endifreturn 0;
}

注意

因为在代码中初始节点数为1<<20-1,如果直接在栈上即main函数中创建Dijkstra类,由于栈空间限制,会出错,所以需要设置为全局变量

相关文章:

UVa658 It’s not a Bug, it’s a Feature!(Dijkstra)

题意 给出一个包含n个bug的应用程序&#xff0c;以及m个补丁&#xff0c;每个补丁使用两个字符串表示&#xff0c;第一个串表示补丁针对bug的情况&#xff0c;即哪些bug存在&#xff0c;以及哪些bug不存在&#xff0c;第二个串表示补丁对bug的修复情况&#xff0c;即修复了哪些…...

Object 类常用方法

在Java中&#xff0c;java.lang.Object类是所有类的根类&#xff0c;因此所有对象都继承了Object类的方法。以下是Object类中一些常用的方法&#xff1a; equals(Object obj)&#xff1a; 用于比较两个对象是否相等。默认实现是比较对象的引用是否相同&#xff0c;但通常需要…...

chromium 52 chrome 各个版本发布功能列表(58-84)

chromium Features 58-84 From https://chromestatus.com/features chromium58 Features:41 ‘allow-top-navigation-by-user-activation’ <iframe sandbox> keyword Adds a new keyword named “allow-top-navigation-by-user-activation” for iframe sandbox, wh…...

python web开发(四): Bootstrap

1.初步了解 别人已经写好的CSS样式&#xff0c;我们可以直接引用 下载 Link-BootStrap 解压&#xff0c;并放入到当前项目中 引用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</tit…...

【EI会议征稿】2024年遥感技术与测量测绘国际学术会议(RSTSM 2024)

2024年遥感技术与测量测绘国际学术会议&#xff08;RSTSM 2024&#xff09; 2024 International Conference on Remote Sensing Technology and Survey Mapping 2024年遥感技术与测量测绘国际学术会议&#xff08;RSTSM 2024&#xff09;将在2024年1月12-14日于吉林长春召开。…...

灵感:VUE2实现权限按钮控制

运用场景&#xff1b; 根据权限码&#xff0c;实现判断当前用户是否能控制权限按钮 一、在main.JS 里面写入全局指令《自定义权限按钮》 // S 自定义按钮权限 Vue.directive(has, {inserted: function(el, binding) {const buttonList JSON.parse(localStorage.getItem(butt…...

【2023最新版】Python全栈知识点总结

python全栈知识点总结 全栈即指的是全栈工程师&#xff0c;指掌握多种技能&#xff0c;并能利用多种技能独立完成产品的人。就是与这项技能有关的都会&#xff0c;都能够独立的完成。 全栈只是个概念&#xff0c;也分很多种类。真正的全栈工程师涵盖了web开发、DBA 、爬虫 、…...

推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。

文章目录 &#x1f31f; 离线评估&#xff1a;常用的推荐系统离线评估方法有哪些&#xff1f;&#x1f34a; 1. RMSE/MSE&#x1f34a; 2. MAE&#x1f34a; 3. Precision/Recall/F1-score&#x1f34a; 4. Coverage&#x1f34a; 5. Personalization&#x1f34a; 6. AUC &…...

day1:Node.js 简介

day1:Node.js 简介 文章目录 day1:Node.js 简介Node.js 是什么?Node.js 的历史和发展 ?Node.js 的主要用途和优势 ?Node.js 是什么? 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。 Node.js 是一个事…...

ESP RainMaker 客户案例 #1|Halonix

Halonix 是印度规模增长最快的电器公司之一&#xff0c;专注于照明、风扇等电器产品&#xff0c;正在进军健康和安全领域&#xff0c;现已推出紫外线消毒器和安全摄像头。Halonix 致力于创新&#xff0c;不断采用新兴前沿技术实现产品迭代&#xff0c;并通过加强设备间的互联互…...

【Linux】adduser命令使用

我们经常在linux系统中创建用户。有时候用的是 useradd 有时候用的是 adduser &#xff0c;好混乱啊到底用哪个啊。今天咱们一起来学习一下。 adduser与useradd的区别 useradd 命令是内置的 Linux 命令&#xff0c;在任何 Linux 系统中都可用。然而&#xff0c;使用这种低级…...

中文连续视觉语音识别挑战赛

视觉语音识别&#xff0c;也称唇语识别&#xff0c;是一项通过口唇动作来推断发音内容的技术。该技术在公共安全、助老助残、视频验真等领域具有重要应用。当前&#xff0c;唇语识别的研究方兴未艾&#xff0c;虽然在独立词、短语等识别上取得了长足进展&#xff0c;但在大词表…...

(ubuntu) 安装JDK

文章目录 前言参看java版本的命令&#xff1a;安装jdk命令安装jps关闭防火墙&#xff1a;查看端口占用&#xff1a;&#xff08;坑&#xff09;ubuntu上Mysql默认标明 区分大小写 前言 提示&#xff1a;常以为人是一个容器&#xff0c;盛着快乐&#xff0c;盛着悲哀。但是人不…...

工程管理系统源码之全面+高效的工程项目管理软件

高效的工程项目管理软件不仅能够提高效率还应可以帮你节省成本提升利润 在工程行业中&#xff0c;管理不畅以及不良的项目执行&#xff0c;往往会导致项目延期、成本上升、回款拖后&#xff0c;最终导致项目整体盈利下降。企企管理云业财一体化的项目管理系统&#xff0c;确保…...

网络安全常见问题隐患及其应对措施

随着数字化时代的到来&#xff0c;网络安全已经成为组织和个人面临的严重挑战之一。网络攻击日益普及&#xff0c;黑客和不法分子不断寻找机会侵入系统、窃取敏感信息、破坏服务和网络基础设施。在这种情况下&#xff0c;了解网络安全的常见问题隐患以及如何应对它们至关重要。…...

《机器学习分类器 二》——朴素的贝叶斯算法,项目实践,算法实践。

1,朴素贝叶斯算法的介绍 1. 朴素贝叶斯算法定义 朴素贝叶斯算法是基于概率统计的分类方法。它的核心思想是利用贝叶斯定理来估计在给定特征的条件下某个类别的概率&#xff0c;然后选择具有最高概率的类别作为预测结果。在分类问题中&#xff0c;我们通常有一个数据集&#x…...

亚马逊英国站手机/笔记本电脑电池和充电器的合规标准是什么?

手机/笔记本电脑电池和充电器 亚马逊网站上销售的所有手机/笔记本电脑电池和充电器替换件均须符合指定的认证标准。请注意&#xff0c;如果不符合这些标准&#xff0c;亚马逊可能会撤销您的销售权限。要在亚马逊商城销售这些商品&#xff0c;您必须先将以下信息提交至 eu-elec…...

亚马逊云科技顾凡解读云计算助力初创快速抢滩生成式AI新风口

麦肯锡发布的《生成式人工智能的经济潜力》报告指出&#xff0c;“生成式AI可以被用到16个业务部门的63个场景&#xff0c;解决具体的业务挑战&#xff0c;为企业带来2.6到4.4万亿美元的价值。” 在亚马逊云科技大中华区战略业务发展部总经理顾凡看来&#xff0c;未来每一个To …...

Unity之ShaderGraph如何实现积雪效果

前言 我们在一些特殊场景&#xff0c;比如冰雪天&#xff0c;经常会对周围物体添加一些积雪效果&#xff0c;如果我们直接把积雪做到模型上&#xff0c;就无法更加灵活的表现其他天气的环境了&#xff0c;比如春夏秋冬切换。所以一般这种需求我们都是使用Shader来表现。 入下图…...

实现mnist手写数字识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/Nb93582M_5usednAKp_Jtw) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)** >- **&#x1f680;…...

终极IDM激活脚本完全指南:三步实现永久免费下载神器

终极IDM激活脚本完全指南&#xff1a;三步实现永久免费下载神器 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 还在为IDM的30天试用期烦恼吗&#xff1f;IDM Ac…...

告别烦人警告!Pandas 1.5+ 连接MySQL数据库的正确姿势(SQLAlchemy保姆级教程)

Pandas与MySQL交互的现代化实践&#xff1a;从DBAPI2到SQLAlchemy的平滑迁移 当你在Jupyter Notebook中运行那段熟悉的pymysql.connect代码时&#xff0c;突然跳出的黄色警告框是否让你心头一紧&#xff1f;这个看似无害的UserWarning实际上标志着Pandas生态正在经历一次重要的…...

Linux内核安全加固:从编译配置构建系统防护基石

1. 项目概述&#xff1a;为什么我们需要关注内核安全配置&#xff1f;在服务器运维、嵌入式开发或者安全研究领域待久了&#xff0c;你可能会发现一个现象&#xff1a;很多系统被攻破&#xff0c;根源并不在于某个惊天动地的零日漏洞&#xff0c;而在于内核配置本身就没“锁好门…...

终极免费桌面分区工具:NoFences让你的Windows桌面告别杂乱

终极免费桌面分区工具&#xff1a;NoFences让你的Windows桌面告别杂乱 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为Windows桌面上杂乱无章的图标而烦恼吗&#xff1…...

Python自动化拍照邮件系统:从摄像头调用到SMTP发送全流程实战

1. 项目概述&#xff1a;从零搭建一个自动化拍照邮件系统最近在工作室搞了个小项目&#xff0c;需要定时监控一个实验区域的状态&#xff0c;拍下照片后自动发到邮箱里方便随时查看。这个需求听起来简单&#xff0c;但真动手做起来&#xff0c;从摄像头调用、图像处理到邮件发送…...

如何在Windows上快速安装ViGEmBus虚拟手柄驱动:终极指南

如何在Windows上快速安装ViGEmBus虚拟手柄驱动&#xff1a;终极指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 想要在Windows电脑上畅玩所有游戏&#…...

DeepSeek LeetCode 2421. 好路径的数目 Python3实现

给你 Python3 版本的代码&#xff0c;思路和之前的 Java 实现一致&#xff1a; 完整代码 python class Solution: def numberOfGoodPaths(self, vals: List[int], edges: List[List[int]]) -> int: n len(vals) # 1. 构建邻接表 gr…...

开源办公套件自动化部署与集成实战:基于OpenOffice的服务化解决方案

1. 项目概述&#xff1a;为什么我们需要一个“开源”的办公套件&#xff1f;如果你在GitHub上搜索过办公软件相关的仓库&#xff0c;大概率会看到过longyangxi/OpenOffice这个项目。乍一看&#xff0c;你可能会以为这是一个Apache OpenOffice的镜像或者某个分支。但点进去仔细研…...

量化交易强化学习环境TradingGym:从Gym接口到实战策略训练

1. 项目概述&#xff1a;一个为量化交易策略量身定制的强化学习训练场如果你正在尝试将强化学习&#xff08;Reinforcement Learning, RL&#xff09;应用到股票、期货或加密货币的量化交易中&#xff0c;大概率会遇到一个共同的困境&#xff1a;环境太难搭了。市面上的回测框架…...

像素艺术家紧急预警:Midjourney即将关闭--tile参数兼容性(倒计时14天),现在必须掌握的3种替代渲染方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;像素艺术家紧急预警&#xff1a;Midjourney即将关闭--tile参数兼容性&#xff08;倒计时14天&#xff09; Midjourney v6.5 已正式宣布将于 14 天后终止对 --tile 参数的原生支持&#xff0c;此举将直…...