luogu2761 软件补丁问题
状压最短路
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
struct Node{
    int bi1, bi2, fi1, fi2;
}nd[105];
int n, m, ww[105], cnt, dis[1050005];
bool vis[1050005];
char a[25], b[25];
queue<int> d;
void spfa(){
    memset(dis, 0x3f, sizeof(dis));
    int uu=(1<<n)-1;
    dis[uu] = 0;
    d.push(uu);
    vis[uu] = true;
    while(!d.empty()){
        int x=d.front();
        d.pop();
        vis[x] = false;
        for(int i=1; i<=m; i++)
            if((x&nd[i].bi1)==nd[i].bi1 && (x&nd[i].bi2)==0){
                int tmp=x;
                tmp &= ~(nd[i].fi1);
                tmp |= nd[i].fi2;
                if(dis[tmp]>dis[x]+ww[i]){
                    dis[tmp] = dis[x] + ww[i];
                    if(!vis[tmp]){
                        vis[tmp] = true;
                        d.push(tmp);
                    }
                }
            }
    }
}
int main(){
    cin>>n>>m;
    for(int i=1; i<=m; i++){
        scanf("%d", &ww[i]);
        scanf("%s %s", a, b);
        for(int j=0; j<n; j++){
            if(a[j]=='+')	nd[i].bi1 |= 1<<j;
            if(a[j]=='-')	nd[i].bi2 |= 1<<j;
        }
        for(int j=0; j<n; j++){
            if(b[j]=='-')	nd[i].fi1 |= 1<<j;
            if(b[j]=='+')	nd[i].fi2 |= 1<<j;
        }
    }
    spfa();
    if(dis[0]==0x3f3f3f3f)	cout<<"0"<<endl;
    else	cout<<dis[0]<<endl;
    return 0;
}
luogu2761 软件补丁问题的更多相关文章
- luogu2761 软件补丁问题 状态压缩最短路径
		关键词:状态压缩 最短路径 想不出快速办法,就先考虑考虑暴力.枚举每一种错误分布的情况,然后通过可用的补丁转化为另多种情况,这些情况又转化为更多种情况……我们可以用图来表示这种关系! 状态压缩:每个错 ... 
- P2761 软件补丁问题
		P2761 软件补丁问题 思路 貌似不用网络流,直接状态压缩 用spfa跑最短路,直接判断是否能过 位运算太渣了,WA了好几发 代码 #include <bits/stdc++.h> us ... 
- Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算)
		Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算) Description T 公司发现其研制的一个软件中有 n 个错误,随即为该软件发放 ... 
- 洛谷P2761 软件补丁问题 [状压DP,SPFA]
		题目传送门 软件补丁问题 题目描述 T 公司发现其研制的一个软件中有 n 个错误,随即为该软件发放了一批共 m 个补丁程序.每一个补丁程序都有其特定的适用环境,某个补丁只有在软件中包含某些错误而同时又 ... 
- COGS439. [网络流24题] 软件补丁
		[问题描述] 对于一个软件公司来说,在发行一个新软件之后,可以说已经完成了工作.但是实际上,许多软件公司在发行一个新产品之后,还经常发送补丁程序,修改原产品中的错误(当然,有些补丁是要收费的). 如某 ... 
- 【网络流24题】 No.12 软件补丁问题(最小转移代价 最短路)
		[题意] T 公司发现其研制的一个软件中有 n 个错误, 随即为该软件发放了一批共 m 个补丁程序. 每一个补丁程序都有其特定的适用环境, 某个补丁只有在软件中包含某些错误而同时又不包含另一些错误时才 ... 
- 【刷题】LOJ 6009 「网络流 24 题」软件补丁
		题目描述 某公司发现其研制的一个软件中有 \(n\) 个错误,随即为该软件发放了一批共 \(m\) 个补丁程序.每一个补丁程序都有其特定的适用环境,某个补丁只有在软件中包含某些错误而同时又不包含另一些 ... 
- LOJ #6009 「网络流 24 题」软件补丁
		题面 某公司发现其研制的一个软件中有 $ n $ 个错误,随即为该软件发放了一批共 $ m $ 个补丁程序.每一个补丁程序都有其特定的适用环境,某个补丁只有在软件中包含某些错误而同时又不包含另一些错误 ... 
- [网络流24题] 洛谷P2761 软件补丁问题
		题意:某公司发现其研制的一个软件中有 n个错误,随即为该软件发放了一批共 m 个补丁程序.对于每一个补丁 i ,都有 2 个与之相应的错误集合 B1(i)和 B2(i),使得仅当软件包含 B1(i)中 ... 
随机推荐
- bjut193E 吃饭时的怪癖
			题目: http://bjutacm.openjudge.cn/lianxi/193E/ 思路: n的所有质因数之和等于phi(n) * n / 2, phi(n)为欧拉函数. 实现: #includ ... 
- iOS-Swift相比Objective-C有哪些优缺点
			Swift,是苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序.它是一款易学易用的编程语言,而且 ... 
- 编写生成32位大写和小写字符的md5的函数
			package nicetime.com.practise; import java.security.MessageDigest; /** * MD5加密是JAVA应用中常见的算法,请写出两个MD5 ... 
- 用指针的方式实现,重写strrchr函数的功能
			char *strchrTest(char * ptr,char c); Action(){ char str[]={"thisisadog"}; char c='s'; lr_o ... 
- COGS 1715. [CQOI2011]动态逆序对
			★★★ 输入文件:inverse.in 输出文件:inverse.out 简单对比时间限制:2 s 内存限制:128 MB [题目描述] 对于序列A,它的逆序对数定义为满足i<j ... 
- [中文翻译] ASP.NET 5 简介(Introducing ASP.NET 5,原作ScottGu 2015/2/23)
			本文出处 [中文翻译] ASP.NET 5 简介(Introducing ASP.NET 5,原作ScottGu 2015/2/23) 这是我的文章备份 http://www.dotblogs.co ... 
- MovieReview—Ghost in the Shell 2: Innocence(攻壳机动队2:无罪)
			Doll killing event The movie was developed around a series of doll murders. Barthes and o ... 
- NSXMLParser
			NSXMLParser的使用 2011-05-05 15:50:17| 分类: 解析|字号 订阅 NSXMLParser解析xml格式的数据 用法如下: 首先,NSXMLParser必须继续 ... 
- iOS 后台传输服务
			后台传输服务 — 我们用水壶来比喻 (0:14) 后天传输服务是 iOS 7 引进的 API,它准许应用暂停或者中止之后,在后台继续执行网络服务(比如下载或者上传).举个例子,这正是 Dropbox ... 
- 微信iOS多设备多字体适配方案总结
			一.背景 2014下半年,微信iOS版先后适配iPad, iPhone6/6plus.随着这些大屏设备的登场,部分用户觉得微信的字体太小,但也有很多用户不喜欢太大的字体.为了满足不同用户的需求,我们做 ... 
