luogu2761 软件补丁问题
2024-09-01 06:20:26
状压最短路
#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;
}
最新文章
- 【转】java URLConnection从网上下载图片或音乐
- linux select
- HDU 1018 Big Number (阶乘位数)
- 读loadBalance技术的一些笔记
- OFBiz之SVN下载地址
- C# List<;>; 删除
- Vue 项目实战系列 (一)
- vue mint UI
- Asp,NET控制文件上传的大小
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 配置选项
- 如何在本地测试Fabric Code
- Widows自带系统监控工具——24小时监控服务器性能
- openstack网络基础:网络叠加模式VLAN、VxLAN、GRE
- win7旗舰版64位GHOST版的,安装telnet客户端时,提示:出现错误。并非所有的功能被成功更改。
- [ 中危 ] 发布处存在CSRF及CSRF设想
- 基于python的发送邮件案例
- 【oauth2.0】【2】JAVA 客户端模式
- OpenCV人脸特效制作
- L3-017 森森快递 (30 分)
- error C2065: “m_Pic”: 未声明的标识符
热门文章
- JAVA基础之转换流和缓冲流
- 对flex-grow和flex-shrink的深入理解
- npm使用快速的安装源(nrm)
- 2017.10.6 QBXT 模拟赛
- 洛谷 P2905 [USACO08OPEN]农场危机Crisis on the Farm
- windows10下安装TensorFlow Object Detection API
- 【UML】构件图Component diagram(实现图)(转)
- Codeforces Round #321 (Div. 2) E 	 Kefa and Watch (线段树维护Hash)
- TextView中使用Linkify添加超链接
- 《队长说得队》第八次团队作业Alpha冲刺