博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【网络流24题】软件补丁问题 题解
阅读量:2305 次
发布时间:2019-05-09

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

题目大意: 一开始有一个含有 n n n 个错误的软件,还有 m m m 个补丁,第 i i i 个补丁只有当软件包含 B 1 [ i ] B1[i] B1[i] 集合中的所有错误以及不包含 B 2 [ i ] B2[i] B2[i] 集合中的任何错误才能使用,使用后会将 F 1 [ i ] F1[i] F1[i] 集合中的错误消除,并且会加入 F 2 [ i ] F2[i] F2[i] 集合中的错误。问将软件修改到无错误最少要用几个补丁。

题解

不知道为啥在网络流 24 24 24 题里,这应该就是个最短路呀qwq

做法很简单,由于 n n n 很小,于是可以把 2 n − 1 2^n-1 2n1 个状态都列出来,然后从 2 n − 1 2^n-1 2n1 开始跑SPFA,每次看能打哪个补丁,然后转移即可。

代码如下:

#include 
#include
#define maxn 1100000#define ll long longint n,m,t[maxn];char s[maxn];int B1[maxn],B2[maxn],F1[maxn],F2[maxn];int q[maxn],st=1,ed=2;ll f[maxn];bool v[maxn];void spfa(){
memset(f,63,sizeof(f)); q[st]=(1<
((1<
f[x]+t[i]) {
f[y]=f[x]+t[i]; if(!v[y])v[q[ed++]=y]=true,ed=ed>((1<
1e18?0:f[0]);}

转载地址:http://gcnib.baihongyu.com/

你可能感兴趣的文章
装饰者模式(一)
查看>>
DelegatingFilterProxy
查看>>
CAS
查看>>
CAS简单实例
查看>>
CAS结合openldap
查看>>
数据库基础知识
查看>>
Spring事务管理
查看>>
乐观锁-CAS
查看>>
Socket学习
查看>>
机器学习算法比较
查看>>
大杀器xgboost指南
查看>>
ubuntu14.04+hadoop2.6.2+hive1.1.1
查看>>
二叉查找树转双向链表JAVA实现
查看>>
包含min函数的栈JAVA实现
查看>>
Hive几种数据导入方式
查看>>
最大子数组
查看>>
在二叉树中找出和为某一值的所有路径
查看>>
二进制中1的个数
查看>>
数值的整数次方
查看>>
链表中倒数第k个结点
查看>>