紫书例题 11-6 Uva658 SPFA,血坑

OnePlus救砖指南:线刷包与OTA全量包实战解析 本文详细解析了OnePlus手机救砖的两种核心方法:线刷包与OTA全量包。针对手机变砖的不同状况(如黑屏、能进Recovery等),文章提供了清晰的判断标准和对应的实战操作指南。重点阐述了线刷包作为终极救砖手段的底层原理与详细步骤,并对比了OTA全量包作为温和修复方案的使用场景与卡刷流程,旨在帮助用户安全、有效地恢复手机系统。 阅读详情

题目链接:https://vjudge.net/problem/UVA-658
题意:补丁在修正bug时,有时也会引入新的bug。假定有n(n≤20)个潜在bug和m(m≤100)
个补丁,每个补丁用两个长度为n的字符串表示,其中字符串的每个位置表示一个bug。第一
个串表示打补丁之前的状态(“-”表示该bug必须不存在,“+”表示必须存在,0表示无所
谓),第二个串表示打补丁之后的状态(“-”表示不存在,“+”表示存在,0表示不变)。每
个补丁都有一个执行时间,你的任务是用最少的时间把一个所有bug都存在的软件通过打补
丁的方式变得没有bug。一个补丁可以打多次。
解题思路:
在任意时刻,每个bug可能存在也可能不存在,所以可以用一个n位二进制串表示当前软
件的“状态”。打完补丁之后,bug状态会发生改变,对应“状态转移”。是不是很像动态规
划?可惜动态规划是行不通的,因为状态经过多次转移之后可能会回到以前的状态,即状态
图并不是DAG。如果直接用记忆化搜索,会出现无限递归。
正确的方法是把状态看成结点,状态转移看成边,转化成图论中的最短路径问题,然后
使用Dijkstra或Bellman-Ford算法求解。不过这道题和普通的最短路径问题不一样:结点很
多,多达2 n 个,而且很多状态根本遇不到(即不管怎么打补丁,也不可能打成那个状态),
所以没有必要像前面那样先把图储存好。
还记得第7章中介绍的“隐式图搜索”吗?这里也可以用相同的方法:当需要得到某个结
点u出发的所有边时,不是去读G[u],而是直接枚举所有m个补丁,看看是否能打得上。不管
是Dijsktra算法还是Bellman-Ford算法,这个方法都适用。本题很经典,强烈建议读者编程实
现。
两个血坑点:
1:题目给的样例的第一个答案是错误的。应该是”Bugs cannot be fixed.”。。。。
2:inf必须要开到1<<20以上,这里我wa了无数发

具体细节见代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;
const int inf = 0x3f3f3f3f;
int d[(1<<20)+10], vis[(1<<20)+10];
int s[2][maxn], t[2][maxn];
int n, m, w[maxn];
string s1, s2;
void spfa()
{
    int mask = (1<<n) - 1;
    queue <int> que;
    for(int i = 0; i < mask; i++){
        vis[i] = 0;
        d[i] = inf;
    }
    vis[mask] = 1;
    d[mask] = 0;
    que.push(mask);
    while(!que.empty()){
        int u = que.front(); que.pop();
        vis[u] = 0;
        for(int i = 0; i < m; i++){ //同时当需要得到某个结点u出发的所有边时,直接枚举所有m个补丁
            if((u | s[1][i]) == u && ((u & s[0][i]) == u)){ //|代表对于s[1][i]有一个bug满足就可以,&代表对于s[0][i]必须全部满足
                int v = u;
                v = v | t[1][i];
                v = v & t[0][i];
                if(d[u] + w[i] < d[v]){
                    d[v] = d[u] + w[i];
                    if(!vis[v]){
                        que.push(v);
                        vis[v] = 1;
                    }
                }
            }
        }
    }
    if(d[0] == inf){
        printf("Bugs cannot be fixed.\n");
    }
    else{
        printf("Fastest sequence takes %d seconds.\n", d[0]);
    }
}
int main(){
    int ks= 0;
    //cout << 0x3f3f3f3f << endl;(血坑)
    while(scanf("%d%d", &n, &m) != EOF && n)
    {
        memset(s, 0, sizeof(s));
        memset(t, 0, sizeof(t));
        for(int i = 0; i < m; i++){
            cin >> w[i] >> s1 >> s2;
            for(int j = 0; j < n; j++){
                if(s1[j] == '+') s[1][i] += (1<<j); //必须存在
                if(s1[j] != '-') s[0][i] += (1<<j); //排除必须不存在
                if(s2[j] == '+') t[1][i] += (1<<j); //必须存在
                if(s2[j] != '-') t[0][i] += (1<<j); //排除必须不存在
            }
        }
        printf("Product %d\n", ++ks);
        spfa();
        printf("\n");
    }
    return 0;
}
PCIe链路均衡实战:从Preset调节到系数优化的完整指南(附Synopsy IP案例) 本文深入解析PCIe链路均衡技术,从Preset调节到系数优化的全流程实战指南,特别针对PCIe 3.0/4.0中的Recovery.Equalization状态进行详细说明。通过Synopsy IP案例,展示如何应对高速信号完整性挑战,优化前向反馈均衡(FFE)机制,提升系统性能。 阅读详情

相关推荐

ROS2 Nav2实战:解决rviz2显示no map received的3种实用方法(附详细步骤)

本文针对ROS2 Nav2导航栈中rviz2显示“no map received”的常见问题,提供了三种核心解决方案。深入剖析了问题根源在于ROS2生命周期节点管理、QoS策略不匹配及坐标系设置错误,并分别通过手动配置流程、集成生命周期管理器以及调优QoS策略与固化rviz2配置,给出了详细的实战步骤,确保地图数据可靠显示。

j0k1l2m3n的博客 422

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

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

多看多听多总结 733

别再瞎调参数了!用MATLAB fmincon优化傅里叶级数,为你的机器人设计“完美”激励轨迹

本文详细介绍了如何利用MATLAB的fmincon优化器设计机器人激励轨迹,通过优化傅里叶级数参数,解决传统试错法的低效问题。文章涵盖了目标函数设计、约束条件转化及优化算法选择,帮助工程师实现高精度的系统辨识和动力学参数优化。

weixin_42613501的博客 240

UVA658,隐式图+最短路+二进制子集枚举

题目: 首先给出n和m,表示有n个bug和m个补丁。一开始存在n个bug,用1表示一个bug存在0表示不存在,所以一开始就是n个1,我们的目的是要消除所有的bug,所以目标状态就是n个0。对于每个补丁,会给出使用这个补丁的时间,另外会给出两个长度为n的字符串,第一个字符串表示这个补丁适用于什么情况下的bug,第二个字符串表示使用完这个补丁后原来的bug会变成怎么样。先说第一个字符串,s[i]=’

蒟蒻LQL的ACM征程 354

避坑指南:中国地面气候日值数据集(V3.0)处理中的常见错误与解决方案

本文详细解析了中国地面气候日值数据集(V3.0)处理中的常见错误与解决方案,包括数据清洗、特征值解码、时间序列处理和质量控制等关键步骤。通过Python实战代码示例,帮助研究者高效处理这一包含全国699个气象站多要素日值数据的数据集,避免常见陷阱,提升气候变化研究和农业气象分析的准确性。

xray4的博客 1027

深度学习入门:一文详解BP神经网络

在BP神经网络中,输入层和输出层的节点个数都是确定的,而隐含层节点个数不确定,那么应该设置为多少。实际上,隐含层节点个数的多少对神经网络的性能是有影响的,有一个经验公式可以确定隐含层。上面是对隐含层和输出层之间的权值和输出层的阀值计算调整量,而针对输入层和隐含层和隐含层的阀值调。在BP神经网络中,输入层节点没有阀值。神经网络,神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,数据压缩,数据。要求输入模式要有足够的随机性,对输入模式的噪声比较敏感,即对于剧烈变化的输入模式,训。

Machine Learning with Tutors 4万+

UVa658 这不是bug,而是特性

题目:VJ : UVa658 代码实现: #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;queue&gt; #include&lt;vector&gt; #include&lt;string&gt; #include&lt;functional&gt; using namespace std; struct Node{...

Moyu的专栏 356

STM32 W5500 Freemodbus Modbus TCP协议功能实现

STM32F103VCT6 W5500(SPI1),实现Modbus-TCP协议的功能

坚韧与专注 2万+

UVa 658 It's not a Bug, it's a Feature!(最短路问题)

题目链接:http://acm.hust.edu.cn/vjudge/problem/22169 大体思路:按照刘汝佳的思路来的,把各个bug的状态(用一个二进制串来表示)当作结点,当前状态到下一状态当作边,然后套用dijkstra算法即可。在寻找边时,直接枚举所有补丁,看看哪个能打上,把打上之后的状态求出来,然后不断更新新状态,当出现0时(即所有bug都消失时),即退出。 #include

Interstellar_的博客 478

2023华为od机试C卷【启动多任务排序】C++ 实现

一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则立刻开始执行,如果同时有多个任务要执行,则根据任务名称字母顺序排序。

MISAYAONE的博客 887

【UE5】RTS游戏的框选功能+行军线效果实现

步骤: 一、项目准备; 二、框选NPC并移动到指定地点; 三、框选效果; 四、行军线效果

ChaoChao66666的博客 2379

UVA - 658 It’s not a Bug, it’s a Feature!(优先队列Dijkstra)

UVA - 658 It’s not a Bug, it’s a Feature!(优先队列Dijkstra) 题目链接 题目大意:补丁和漏洞之间的修复问题。有n种漏洞,m种补丁,接着给你m行代表的是n种补丁使用的情况。前面的n个字符表示的是补丁的使用前提,后面的n个字符表示的是补丁使用完后的漏洞状况。字符‘0’代表的是这个漏洞存不存在都没关系,‘+’代表的是这个漏洞存在或者出现, ‘-’代表

775

【数据集】全球大气空气柱平均甲烷(XCH₄)和一氧化碳(XCO)浓度数据集 TROPOMI/WFMD

全球大气空气柱平均甲烷(XCH₄)和一氧化碳(XCO)浓度数据集 TROPOMI/WFMD

WW、forever的博客 388

【UVa658】【SPFA】【状态压缩】It's not a Bug,it's a Featurel.

此题源自UVa658,嗯还可以从这里看到->刘汝佳出的紫书P365例题11-6。 链接:戳我戳我qwq 此题,首先如果直接dfs明显会超,boom!我认为比较巧妙的地方在于:1.用二进制来表示状态:bug的存在√2.将’+’单独分类,’0’、’+’再合并分类,分别通过or(|)、 and(&)操作来完成,详细的地方看看代码,有批注哒。特别是对于’-‘的转化处理,可棒了!3.在这题可以使用dijk

Sue2333的博客 666

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【UVA658】It's not a Bug, it's a Feature!——杨子曰题目

【洛谷P2761】软件补丁问题——杨子曰题目 喂喂喂,大标题和文章标题不一样!! 呵呵,同一道题……(就是如此神奇) 这里贴的是【洛谷P2761】软件补丁问题,其实就是uva那道题的翻译: 题目描述 T 公司发现其研制的一个软件中有 n 个错误,随即为该软件发放了一批共 m 个补丁程序。每一个补丁程序都有其特定的适用环境,某个补丁只有在软件中包含某些错误而同时又不包含另一些错误时才可以使用。一个...

杨子曰:代码是神奇的 384

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Uva658_图论最短路径

图论训练1——Uva658  总结:本题初看不太容易想到图论的最短路径去做,应该说是图论典型的变形。因为每一种bug只有存在和不存在两种情况,所以可以用二进制表示每种状态,也就是图中的结点。这样我们要求的就变成了两结点的最短路径,可以用Dijkstra算法完成。但是由于结点数多达2^n,所以此题很难用邻接表或邻接矩阵表示,因此在对某结点的边进行枚举时我们要直接对m个补丁进行枚举。  本题可以说是很...

qq_42663062的博客 260

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

uva658

题目大意: 首先给出n和m,表示有n个bug和m个补丁。一开始存在n个bug,用1表示一个bug存在0表示不存在,所以一开始就是n个1,我们的目的是要消除所有的bug,所以目标状态就是n个0。对于每个补丁,会给出使用这个补丁的时间,另外会给出两个长度为n的字符串,第一个字符串表示这个补丁适用于什么情况下的bug,第二个字符串表示使用完这个补丁后原来的bug会变成怎么样。先说第一个字符串,s[i]=

不努力只能看别人脸色。 1164

UVA 658 It's not a Bug, it's a Feature! (最短路)

题意:假定有n个潜在的bug和m个补丁,每个补丁用长为n的字符串表示。首先输入bug数目以及补丁数目。然后就是对m个补丁的描述,共有m行。每行首先是一个整数,表明打该补丁所需要的时间。然后是两个字符串,地一个字符串是对软件的描述,只有软件处于该状态下才能打该补丁该字符串的每一个位置代表bug状态(-代表该位置没bug,+代表该位置有bug,0表示该位置无论有没有bug都可打补丁)。然后第二个字符串...

Insist_77的博客 360

UVA 658 - It's not a Bug, it's a Feature!(dijkstra+优先队列)

题意: 某个软件有n个漏洞m的补丁,而每个补丁修复漏洞有前提条件,即有些漏洞必须存在或不存在,每个补丁的修复时间各不相同,现在有n个漏洞,让你求出把这n个漏洞全部修复所花的最少时间。 解析: 这个题目可以转化为最短路的模型来求解。由n个1或0来表示bug,我们很容易联想要二进制和十进制的转化,对于当前的bug状态,我们可以转化为1个十进制来表示,那么一开始的状态显然就是2^n-1,目标状态就

小G的ACM之路 893

uva_658_It's not a Bug, it's a Feature!(最短路)

题意:补丁在修补bug时,有时候会引入新的bug。假定有n(n<=20)个潜在bug和m(m<=100)个补丁,每个补丁用两个长度为n的字符串表示,其中字符串的每个位置表示一个bug。第一个串表示打补丁前的状态(“-”表示该bug必须不存在,“+”表示必须存在,“0”表示无所谓),第二个串表示打补丁后的状态(“-”表示不存在,“+”表示存在,“0”表示不变)。每个补丁都有一个执行时间,你的任务是用最少的时间把一个所有bug都存在的软件通过打补丁的方式变得没有bug。一个补丁可以打多次。

一点也不二 1880

uva 658

题意:  略过。思路: 因为n 的最大为 20  所以我们可以二进制枚举状态。  第一个字符串: 将+的地方保存进入now [1][i]  表示现在第i  个补丁 第j  位  有没有+ 有 + 则 第j 位为1   将+和0的地方保存进入now [0][i]   表示 第i 个补丁 的第j 位 有没有 -  如果有-  那么该位为 0  否则  表示该位  有+  或者0  第二个字符串: 同上...

yjt9299的博客 316

Uva 658 - It's not a Bug, it's a Feature! (最短路)

题目链接 https://vjudge.net/problem/UVA-658 【题意】 补丁在修复bug时,有时也会引入新的bug,假定有n(n&lt;=20)个潜在的bug和m(m&lt;=100)个补丁,每个补丁用两个长度为n的字符串表示,其中字符串的每个位置表示一个bug,第一个字符串表示打补丁之前的状态(’+’表示bug必须存在,’-‘表示必须不存在,’0’表示无所谓),第二个字符串...

Change the world by program. 645

[二进制位运算状态 隐式图搜索]UVa658 - It's not a Bug, it's a Feature!

用二进制表示状态运算起来更快一些,这样一行就可以用一个数字去表示其状态了。按这个思路继续想下去就是如何建图了,其实无论邻接表还是邻接矩阵貌似建完整图的时间复杂度都比较大,而且好多状态未必用的到,因而不如干脆不建完整图,每次都扫描一遍转换规则,如果可以生成另一个状态就将另一个状态直接入队即可。 ①判定某些位置是否为1,如判定2、4位置为1,则转化为判断x|0101是否等于x。

Dosth_Magic 615

UVA658 It's not a Bug, it's a Feature!

题解:这折磨人的题目…补丁在修正BUG时,有时也会引入新的BUG,假定有n(n<=20)个潜在BUG,和m(m<=100)个补丁,每个补丁用两个长度为n的字符串表示,其中字符串的每个位置表示一个bug,第一个串表示打补丁之前的状态(“-”表示该BUG必须不存在,“+”表示该补丁必须存在,0表示无所谓),第二串表示打补丁之后的状态(”-“表示不存在,“+”表示存在,0表示不变)。每个补丁有一定的执行时

围巾的ACM博客 1114

UVa658 - It's not a Bug, it's a Feature!

题意:发布的软件有n个bug,m个补丁。。

A Cube Master 677

uva658(最短路径+隐式图+状态压缩)

题目连接(vj):https://vjudge.net/problem/UVA-658 题意:补丁在修正 bug 时,有时也会引入新的 bug。假定有 n(n≤20)个潜在 bug 和 m(m≤100)个补丁,每个补丁用两个长度为 n 的字符串表示,其中字符串的每个位置表示一个 bug。第一个串表示打补丁之前的状态(“-” 表示该 bug 必须不存在,“+” 表示必须存在,0 表示无所谓)...

weixin_33949359的博客 258
上一篇: 紫书例题 11-5 Uva 10048 Floyd变形或者Kruskal离线
下一篇: BZOJ 1070: [SCOI2007]修车 费用流
just_sort
博客等级 码龄11年 2357粉丝 1667原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值