当遇到瓶颈时,想想自己是否做了可以优化的无用功。

解析

不难想到状压最短路的做法。
但是直接加边的话边数会是 O(m2n)O(m2^n)O(m2n) 级别,只有 909090 分,难以通过。
注意到,由于补丁很少,真正能达到的状态是很有限的。所以我们不真正加边,而是在每次枚举出边时改为遍历所有补丁利用合法的补丁转移即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
const int N=2e6+100;
const int M=1e6+100;
const int inf=1e9;int n,m;int mi[30],S;
char s1[30],s2[30];
int dis[N];
#define mkp make_pair
#define pr pair<int,int>
priority_queue<pr,vector<pr>,greater<pr> >q;
bool vis[N];
int ned[105],no[105],add[105],del[105],val[105];
void dij(){memset(dis,0x3f,sizeof(dis));dis[S]=0;q.push(mkp(0,S));while(!q.empty()){int now=q.top().second;q.pop();if(vis[now]) continue;vis[now]=1;for(int i=1;i<=m;i++){if((now&ned[i])!=ned[i]||(now&no[i])) continue;int to=now;to|=add[i];to&=(S-del[i]);if(dis[to]>dis[now]+val[i]){dis[to]=dis[now]+val[i];q.push(mkp(dis[to],to));//printf("%d->%d dis=%d\n",now,to,dis[to]);}}}return;
}
signed main(){#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);#endif//printf("%d\n",sizeof(p)/1024/1024);n=read();m=read();mi[0]=1;for(int i=1;i<=n;i++) mi[i]=mi[i-1]<<1;S=mi[n]-1;for(int k=1;k<=m;k++){val[k]=read();scanf(" %s %s",s1+1,s2+1);for(int i=1;i<=n;i++){if(s1[i]=='+') ned[k]|=mi[i-1];if(s1[i]=='-') no[k]|=mi[i-1];if(s2[i]=='+') add[k]|=mi[i-1];if(s2[i]=='-') del[k]|=mi[i-1];}}dij();printf("%d\n",dis[0]<inf?dis[0]:0);return 0;
}
/*
*/

洛谷P2761:软件补丁问题(状压、分层图最短路)相关推荐

  1. 洛谷 - P2761 软件补丁问题(spfa+状压)

    题目链接:点击查看 题目大意:给出 n 个错误,再给出 m 个补丁,对于每个补丁而言,设 b1,b2,f1,f2 分别为四个集合:当且仅当 b1 所表示的错误全部存在且 b2 所表示的错误没有任何一个 ...

  2. 洛谷P1896 [SCOI2005]互不侵犯 状压dp+位运算

    题目链接:https://www.luogu.org/problem/P1896 题意:n*n的格子填数,每个数填放位置的周围(8个)不能有其他的数 n<=9 ,矩形状压 f[i][j][s], ...

  3. 洛谷P1896 互不侵犯【状压DP】

    题目链接:P1896 互不侵犯 分析:普通的状压DP再多加一维记个数,然后找到能转移到当前的状态更新答案: #include<bits/stdc++.h> using namespace ...

  4. 2018.11.01【NOIP2016】【洛谷P2831】愤怒的小鸟(状压DP)

    传送门 解析: 数据范围181818,多么显然的状压... 但是!!!为什么O(n22n)O(n^22^n)O(n22n)能过???复杂度明显不对啊... 这里提供一种O(n2n)O(n2^n)O(n ...

  5. 洛谷P2704 [NOI2001]炮兵阵地(状压dp)

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P&quo ...

  6. 【洛谷】P1357 花园(状压+矩阵快速幂)

    题目 传送门:QWQ 分析 因为m很小,考虑把所有状态压成m位二进制数. 那么总状态数小于$ 2^5 $. 如果状态$ i $能转移到$ j $,那么扔进一个矩阵,n次方快速幂一下. 答案是对角线之和 ...

  7. 【洛谷】P1052 过河(状压dp)

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  8. 洛谷 P1948 / loj 10074 / 一本通 1496【分层图】

    坑点:求得是最大边权,dijk需要把求和改成最大值. #include <bits/stdc++.h> #define int long longusing namespace std;v ...

  9. iMindMap思维导图软件之树状思维导图

    随着生活节奏的日益加快,你是否觉得脑力跟不上.创意不够新颖.思维还经常受阻呢?这个时候,或许思维导图可以为你打开一个新的世界,让你有焕然一新的感觉.帮助你从根本释放工作压力. 关于思维导图 思维导图又 ...

最新文章

  1. Mongo、Redis、Memcached对比及知识总结
  2. 网络爬虫---json编码和解码
  3. golang rune类型简介
  4. 求组合数的算法 java,求一个整数的组合数算法(java)
  5. 记一次特别的往事 while 循环
  6. turtle 20秒画完小猪佩奇“社会人”
  7. lua协程 unity_unity协程coroutine浅析
  8. java毕业设计房屋租赁管理系统Mybatis+系统+数据库+调试部署
  9. 程序员宝典 c语言版,C语言宝典app下载
  10. 10万+标注数据开放!驾驶员不良驾驶识别/电动车进电梯检测/渣土车车牌识别/反光衣识别等8大赛题详解来了!...
  11. duplicate key java,Duplicate key or integrity
  12. 使用ado访问excel中的数据
  13. 喜获5亿元D2轮融资,星环科技谋求更多发展!
  14. python 实现问卷星自动填写多份
  15. ps切图(8)——精准切图
  16. 代办申请的软件著作权怎么知道真假?如何查询软著证书的真假?
  17. 畅言普通话软件测试准确率高吗,畅言普通话测试准确吗?畅言普通话准确度介绍...
  18. 文档编辑之markdown语法(typora)
  19. Anaconda prompt cd命令 盘之间切换
  20. vue2项目复习01-关闭elint检校,src文件别名,路由传参的对象写法,代理解决跨域问题,nprogress,vuex状态管理库,store的模块式开发,节流与防抖,编程式导航+事件委托路由跳转

热门文章

  1. Oracle常用知识总结
  2. startindex 不能大于字符串长度_玩转云端丨redis的5种对象与8种数据结构之字符串对象(下)...
  3. apache weblogic ssl linux,apache基于ssl配置weblogic(完结篇)
  4. c#程序设计教程 唐大仕pdf_C# 添加PDF水印
  5. java将图片铺满panel_如何让添加的背景图片铺满整个JFrame?
  6. android 开启一个定时线程_Android 定时任务刷新的多种实现方式
  7. cocoscreator editbox 只允许数字_《Cocos Creator游戏实战》做一个数字调节框
  8. swot分析模板_什么是SWOT分析图?怎样绘制SWOT分析思维导图,这样操作很简单
  9. linux如何实现网络高级编程,嵌入式Linux网络编程之:网络高级编程-嵌入式系统-与非网...
  10. php查询类似abab,ABAB中的正则表达式匹配编号(必须相同) - php