并不是网络流

状压+SPFA

通过题目中的描述及数据范围可知,我们状压当前的漏洞,以每个二进制位表示是否有这个漏洞,并以状压的结果为顶点,以补丁的时间为边跑SPFA即可

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int n,m,dis[1500000];
struct edge{
int dis,yes,no,out,in;
}e[105];
bool f[1500000];
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>e[i].dis;
char s[30];
scanf("%s",s);
for(int j=0;j<n;j++){
if(s[j]=='0') continue;
if(s[j]=='+') e[i].yes=(e[i].yes)|(1<<j);
else e[i].no=(e[i].no)|(1<<j);
}
scanf("%s",s);
for(int j=0;j<n;j++){
if(s[j]=='0') continue;
if(s[j]=='+') e[i].in=(e[i].in)|(1<<j);
else e[i].out=(e[i].out)|(1<<j);
}
}
/* for(int i=1;i<=m;i++){
printf("%d %d %d %d\n",e[i].yes,e[i].no,e[i].in,e[i].out);
}*/
memset(dis,0x3f,sizeof(dis));
queue<int> q;
int s=0;
for(int i=0;i<n;i++) s=s|(1<<i);
q.push(s);f[s]=1;dis[s]=0;
while(!q.empty()){
int u=q.front();q.pop();f[u]=0;
for(int i=1;i<=m;i++){
if(!((u^e[i].yes)&e[i].yes)&&((u^e[i].no)&e[i].no)==e[i].no){
int v=u;
v=v^(v&e[i].out);v=v|e[i].in;
//cout<<v<<endl;
if(dis[v]>dis[u]+e[i].dis){
dis[v]=dis[u]+e[i].dis;
if(!f[v]){
q.push(v);
f[v]=1;
}
}
}
}
}
if(dis[0]!=0x3f3f3f3f) cout<<dis[0]<<endl;
else cout<<0<<endl;
}

洛谷 [P2761] 软件补丁问题的更多相关文章

  1. 洛谷P2761 软件补丁问题 [状压DP,SPFA]

    题目传送门 软件补丁问题 题目描述 T 公司发现其研制的一个软件中有 n 个错误,随即为该软件发放了一批共 m 个补丁程序.每一个补丁程序都有其特定的适用环境,某个补丁只有在软件中包含某些错误而同时又 ...

  2. [网络流24题] 洛谷P2761 软件补丁问题

    题意:某公司发现其研制的一个软件中有 n个错误,随即为该软件发放了一批共 m 个补丁程序.对于每一个补丁 i ,都有 2 个与之相应的错误集合 B1(i)和 B2(i),使得仅当软件包含 B1(i)中 ...

  3. 洛谷P2761 软件补丁问题(状压DP,SPFA)

    题意 描述不清... Sol 网络流24题里面怎么会有状压dp?? 真是狗血,不过还是简单吧. 直接用$f[sta]$表示当前状态为$sta$时的最小花费 转移的时候枚举一下哪一个补丁可以搞这个状态 ...

  4. 洛谷P2761 软件补丁问题(状压dp)

    传送门 啊咧……这题不是网络流二十四题么……为啥是个状压dp…… 把每一个漏洞看成一个状态,直接硬上状压dp 然后因为有后效型,得用spfa //minamoto #include<iostre ...

  5. 洛谷 P2761 软件补丁问题 【spfa】

    -为什么最短路的题会出现在网络流24里?? 因为范围是15所以直接把每个状态作为一个点,向它能转移到的点连有向边即可.可以不用建图(据说建图存不下?),直接枚举m个转移方案.位运算比较麻烦注意不要写错 ...

  6. P2761 软件补丁问题

    P2761 软件补丁问题 思路 貌似不用网络流,直接状态压缩 用spfa跑最短路,直接判断是否能过 位运算太渣了,WA了好几发 代码 #include <bits/stdc++.h> us ...

  7. 【洛谷 P2761】 软件补丁问题(状态压缩,最短路)

    题目链接 第四题. 初看题目很懵,网络流这么厉害的吗,毫无头绪去看题解.. 所以这和网络流有什么关系呢? 把规则用二进制保存下来,然后跑最短路救星了. 在线跑,离线连边太慢了. (以后干脆不管什么题直 ...

  8. luogu P2761 软件补丁问题

    网络流(x) 状压(√) 初始状态为全1,合法状态为(state&b1)&(state|b1) == state && (state&b2)&(stat ...

  9. 软件补丁问题(SPFA+位运算)

    洛谷P2761 1.考虑到所有的错误只有“修复,未修复”两种情况,所以可以用0,1标记压缩状态,采用位运算减少时空浪费. 又考虑到有修复时间的关系,将时间抽象成边,将状态抽象为点(设修复为0,未修复为 ...

随机推荐

  1. 创建jedis对象

    1.先在taotao-parent的pom.xml中复制 以下内容到rest的pom.xml中 <!-- Redis客户端 --> <dependency> <group ...

  2. ceph -s集群报错too many PGs per OSD

    背景 集群状态报错,如下: # ceph -s cluster 1d64ac80-21be-430e-98a8-b4d8aeb18560 health HEALTH_WARN <-- 报错的地方 ...

  3. 免费V P N获取方式。

    给需要加速器链接国外网站的朋友, 打开网址:http://miaoaff.com/reg.php?id=204250: 用一个邮箱注册,就会得到一个免费的vpn软件账号(包含300M流量时间永久): ...

  4. C# 小笔记

    1,Using using (var ws = new WebSocket ("ws://dragonsnest.far/Laputa")) { ws.OnMessage += ( ...

  5. hbase性能优化总结

    hbase性能优化总结 1. 表的设计 1.1 Pre-Creating Regions 默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都 ...

  6. addslashes() 函数返回在预定义字符之前添加反斜杠的字符串

    . 预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL 提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串. 注释:默认地,PHP 对所有的 GET.PO ...

  7. Mysql Nested-Loop Join Algorithms

    MySQL在多表之间执行join时,利用一种nested-loop algorithm 或者其变种:(嵌套循环)  Nested-Loop Join Algorithm      一个简单的嵌套循环连 ...

  8. CSS3总结学习(一):CSS3用户界面

    在CSS3中,新的用户界面属性有很多,本文重点介绍resize,box-sizing,offset. 浏览器支持,如下图,图片源于W3school 1.CSS Resizing 在css3,resiz ...

  9. 2017-07-06(grep man apropos )

    grep 格式 grep [选项]  字符串  文件名 选项 -i 忽略大小写 -v 排除指定字符串 作用 在文件中查找字符串 例子 grep  "size"  anaconda- ...

  10. python 程序退出方式

    sys.exit() 执行该语句会直接退出程序,这也是经常使用的方法,也不需要考虑平台等因素的影响,一般是退出Python程序的首选方法. 该方法中包含一个参数status,默认为0,表示正常退出,也 ...