【网络流24题】软件补丁问题(最短路)
2018-01-02 09:27
423 查看
题面
COGS题解
这题貌似和网络流没啥关系因为错误很少
可以直接状压
然后利用位运算直接跑最短路就行了
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<set> #include<map> #include<vector> #include<queue> using namespace std; #define MAX 1001 inline int read() { int x=0,t=1;char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=-1,ch=getchar(); while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar(); return x*t; } int b1[MAX],b2[MAX]; int F1[MAX],F2[MAX]; char ch[50]; int t[MAX]; int dis[1<<20]; bool vis[1<<20]; queue<int> Q; int n,m; int main() { freopen("bugs.in","r",stdin); freopen("bugs.out","w",stdout); n=read();m=read(); for(int i=1;i<=m;++i) { t[i]=read(); scanf("%s",ch); for(int j=0;j<n;++j) { if(ch[j]=='+')b1[i]|=1<<j; if(ch[j]=='-')b2[i]|=1<<j; } scanf("%s",ch); for(int j=0;j<n;++j) { if(ch[j]=='-')F1[i]|=1<<j; if(ch[j]=='+')F2[i]|=1<<j; } } memset(dis,63,sizeof(dis)); int INF=dis[0]; dis[(1<<n)-1]=0;vis[(1<<n)-1]=1; Q.push((1<<n)-1); while(!Q.empty()) { int u=Q.front();Q.pop(); for(int i=1;i<=m;++i) { if(((u&b1[i])^b1[i])||(u&b2[i]))continue; int v=(u^(u&F1[i]))|F2[i]; if(dis[v]>dis[u]+t[i]) { dis[v]=dis[u]+t[i]; if(!vis[v]) { vis[v]=true; Q.push(v); } } } vis[u]=false; } printf("%d\n",dis[0]==INF?-1:dis[0]); return 0; }
相关文章推荐
- 【网络流24题】 No.12 软件补丁问题(最小转移代价 最短路)
- 【网络流24题】软件补丁问题
- 【网络流24题----12】软件补丁问题
- Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算)
- 【loj】#6009. 「网络流 24 题」软件补丁(状态压缩+最短路)
- 【网络流24题】软件补丁(最短路)
- [Luogu P2761] [网络流24题] 软件补丁问题
- [网络流24题] 软件补丁问题
- [网络流24题] 软件补丁问题
- 网络流二十四题之十二 —— 软件补丁问题(BUG)
- 【网络流24题】汽车加油行驶问题(最短路)
- COGS439. [网络流24题] 软件补丁
- COGS 439 [网络流24题] 软件补丁
- 【线性规划与网络流24题 12】软件补丁 最短路算法
- 【网络流24题】孤岛营救问题(最短路)
- BZOJ 1221 HNOI 2001 软件开发/网络流24题 餐巾计划问题 最小费用最大流
- [luoguP2761] 软件补丁问题(状压最短路)
- 费用流+构图——Luogu1251 [网络流24题]餐巾计划问题([HNOI2001]软件开发)
- LOJ6009「网络流 24 题 - 10」软件补丁 最小代价转移 SPFA状态压缩
- 【网络流24题】 No.14 孤岛营救问题 (分层图最短路)