状压最短路

#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;
}

最新文章

  1. 【转】java URLConnection从网上下载图片或音乐
  2. linux select
  3. HDU 1018 Big Number (阶乘位数)
  4. 读loadBalance技术的一些笔记
  5. OFBiz之SVN下载地址
  6. C# List&lt;&gt; 删除
  7. Vue 项目实战系列 (一)
  8. vue mint UI
  9. Asp,NET控制文件上传的大小
  10. [翻译] 编写高性能 .NET 代码--第二章 GC -- 配置选项
  11. 如何在本地测试Fabric Code
  12. Widows自带系统监控工具——24小时监控服务器性能
  13. openstack网络基础:网络叠加模式VLAN、VxLAN、GRE
  14. win7旗舰版64位GHOST版的,安装telnet客户端时,提示:出现错误。并非所有的功能被成功更改。
  15. [ 中危 ] 发布处存在CSRF及CSRF设想
  16. 基于python的发送邮件案例
  17. 【oauth2.0】【2】JAVA 客户端模式
  18. OpenCV人脸特效制作
  19. L3-017 森森快递 (30 分)
  20. error C2065: “m_Pic”: 未声明的标识符

热门文章

  1. JAVA基础之转换流和缓冲流
  2. 对flex-grow和flex-shrink的深入理解
  3. npm使用快速的安装源(nrm)
  4. 2017.10.6 QBXT 模拟赛
  5. 洛谷 P2905 [USACO08OPEN]农场危机Crisis on the Farm
  6. windows10下安装TensorFlow Object Detection API
  7. 【UML】构件图Component diagram(实现图)(转)
  8. Codeforces Round #321 (Div. 2) E Kefa and Watch (线段树维护Hash)
  9. TextView中使用Linkify添加超链接
  10. 《队长说得队》第八次团队作业Alpha冲刺