题目:洛谷P2761、vijos P1019、codevs1239、codevs2218。

题目大意:有n个错误,m个不同的补丁。

对于一个补丁,有两个不同的字符串描述。具体如下:

如果当前错误包含第一个字符串中“+”的所有错误,且不包含第一个字符串中“-”的所有错误,则可以用这个补丁。

使用这个补丁将修复第二个字符串中“-”的所有错误,但会增加第二个字符串中“+”的错误。

使用每个补丁都要耗费一定的时间。

现在这些错误都有,每个补丁可以重复安装,问你最短要多长时间能修复所有错误,如果无法完成,输出0。

解题思路:并没有看出来要用什么网络流。

首先最多20个错误,用32位整数的每一位保存一种错误,完全没有问题。

然后,可以发现本题是一个最短路问题,要从最初有全部错误的状态转移到最终无错误的状态,其中有很多状态,且有很多连边。

但是状态数太多,没法保存边怎么办?

直接在SPFA/Dijkstra里枚举要用的补丁即可。

在这之中的一些判断就要用到位运算,不懂的可以百度。

到0的最短路长度即为答案。

如果发现无答案,则输出0。

C++ Code:

#include<cstdio>
#include<queue>
#include<cstring>
int n,m,dis[1<<21];
bool vis[1<<21];
struct buding{
int has,donthas,ac,wa,t;//has表示要有这些错误,donthas表示不能有这些错误,ac表示可以修复这些错误,wa表示会添加这些错误,t表示时间。
buding():has(0),donthas(0),ac(0),wa(0){}
}e[125];
char b[30],f[30];
std::queue<int>q;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
scanf("%d%s%s",&e[i].t,b,f);
for(int j=0;j<n;++j){
if(b[j]=='+')e[i].has|=1<<j;else
if(b[j]=='-')e[i].donthas|=1<<j;
if(f[j]=='+')e[i].wa|=1<<j;else
if(f[j]=='-')e[i].ac|=1<<j;
}
}
q.push((1<<n)-1);
memset(dis,0x3f,sizeof dis);
dis[(1<<n)-1]=0;
memset(vis,0,sizeof vis);
vis[(1<<n)-1]=1;
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=0;
for(int i=1;i<=m;++i)
if(((u&e[i].has)==e[i].has)&&(!(u&e[i].donthas))){
int to=(~((~u)|e[i].ac))|e[i].wa;
if(dis[to]>dis[u]+e[i].t){
dis[to]=dis[u]+e[i].t;
if(!vis[to]){
vis[to]=true;
q.push(to);
}
}
}
}
if(dis[0]==0x3f3f3f3f)puts("0");else
printf("%d\n",dis[0]);
return 0;
}

[CTSC1999][网络流24题]补丁VS错误的更多相关文章

  1. [CTSC1999][网络流24题] 星际转移

    36. [CTSC1999][网络流24题] 星际转移 ★★★☆   输入文件:home.in   输出文件:home.out   简单对比时间限制:1 s   内存限制:128 MB «问题描述: ...

  2. [CTSC1999][网络流24题]家园

    题目:洛谷P2754. 题目大意:有$n$个空间站,$m$个飞船,每个飞船有各自的停靠站点,并且从第一个停靠站点开始,不断循环.每个飞船有不同的容量(-1为月球,0为地球).每个飞船初始停在第一个停靠 ...

  3. 【网络流24题】 No.12 软件补丁问题(最小转移代价 最短路)

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

  4. 【刷题】LOJ 6009 「网络流 24 题」软件补丁

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

  5. Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算)

    Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算) Description T 公司发现其研制的一个软件中有 n 个错误,随即为该软件发放 ...

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

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

  7. 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)

    写在前面:SDOI2016 Round1滚粗后蒟蒻开始做网络流来自我拯救(2016-04-11再过几天就要考先修课,现在做网络流24题貌似没什么用←退役节奏) 做的题目将附上日期,见证我龟速刷题. 1 ...

  8. 【算法】【网络流24题】巨坑待填(成功TJ,有时间再填)

    ------------------------------------------------------------------------------------ 17/24 --------- ...

  9. 网络流基础&网络流24题

    网络最大流 dinic+当前弧优化. const int N=10007,M=100007,inf=1e9; int s,t,head[N],ver[M],edge[M],Next[M],tot=1, ...

随机推荐

  1. JAVA中各个包的主要作用

    00:48:0800:48:1022013013-06-282013-06-2800:48:182013-06-2800:48:20  java.util是JAVA的utility工具包 java.l ...

  2. [JSOI2018]战争(闵可夫斯基和)

    害怕,可怜几何题 果然不会 题目就是说给你两个凸包,每次询问给你一个向量 \(c\) 问你能不能从两个凸包 \(A\) , \(B\) 里分别找到一个点 \(a\) , \(b\) 满足 \(a+c= ...

  3. 03.IO读写-1.IO介绍

    1 文件操作介绍 in: 输入,读入.从硬盘中读到内存 out: 输出.从内存写到硬盘 文件的作用: 数据存储 2 文件的打开与关闭 2.1 打开文件 在Python,使用open函数,可以打开一个已 ...

  4. 使用maven创建springMVC时返回页面报错

    这是由于你的 Maven 编译级别是 jdk1.5 或以下,而你导入了 jdk1.6 以上的依赖包 解决办法: <build> <finalName></finalNam ...

  5. 【ACM-ICPC 2018 沈阳赛区网络预赛 I】Lattice's basics in digital electronics

    [链接] 我是链接,点我呀:) [题意] [题解] 每个单词的前缀都不同. 不能更明示了... 裸的字典树. 模拟一下.输出一下就ojbk了. [代码] #include <bits/stdc+ ...

  6. JavaScript(正则表达式一)

    -------------------- 创建正则表达式: 验证匹配的两个方法 //正则表达式测试 /* var p=new RegExp("Box","i") ...

  7. Appium遇到问题:

    问题一:问题org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possibl ...

  8. NYIST 119 士兵杀敌(三)

    士兵杀敌(三)时间限制:2000 ms | 内存限制:65535 KB难度:5 描述南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出 ...

  9. HDU6010 Daylight Saving Time

    /* HDU6010 Daylight Saving Time http://acm.hdu.edu.cn/showproblem.php?pid=6010 模拟 题意:算当前时间是否是夏令时 */ ...

  10. BA-siemens-apogee总线不稳定解决方法

    状况一:BLN下的火车头在线,但是下面的模块(包括UEC或者PPM)全部掉线 尝试方法: 使用挨个DDC箱断线的方法测试总线是否上线(可以解决由于总线短路引起的总线故障,施工中总线压冷压端子的话就不容 ...