网络流24题-3 软件补丁问题
题目链接:https://www.luogu.com.cn/problem/P2761

1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int N=2e6+11; 5 const ll inf=9999999999999; 6 int n,m,st,ed,tot=0; 7 int b[3][N],f[3][N],val[N]; 8 ll dis[N]; 9 char p[N],q[N]; 10 bool vis[N]; 11 12 inline int re_ad() { 13 char ch=getchar(); int x=0,f=1; 14 while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); } 15 while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 16 return x*f; 17 } 18 19 inline void SPFA() { 20 memset(vis,false,sizeof(vis)); 21 for(int i=0;i<=(1<<n);++i) dis[i]=inf; 22 queue<int> q; 23 dis[st]=0,vis[st]=true,q.push(st); 24 while(!q.empty()) { 25 int u=q.front(),v; 26 // if(dis[u]==7) printf("qwq\n"); 27 // printf("%d: %d%d%d: %d\n",u,(u>>2)&1,(u>>1)&1,u&1,dis[u]); 28 vis[u]=false; q.pop(); 29 for(int i=1;i<=m;++i) { 30 if((b[1][i]&u)<b[1][i]) continue; 31 if(b[2][i]&u) continue; 32 v=(u&(~f[1][i]))|f[2][i]; 33 // if(dis[u]==7) printf("awa %d %d %lld %lld %d\n",u,v,dis[u],dis[v],val[i]); 34 // printf("%d %d %d: %d\n",u,f[1][i],f[2][i],v); 35 if(dis[u]+1ll*val[i]<dis[v]) { 36 // printf("dis %d %d %d: %lld %d %lld\n",u,v,i,dis[u],val[i],dis[v]); 37 dis[v]=dis[u]+1ll*val[i]; 38 // if(dis[v]==7) printf("%d %d\n",v,vis[v]); 39 if(!vis[v]) vis[v]=true,q.push(v); 40 } 41 } 42 } 43 printf("%lld\n",dis[ed]==inf?0:dis[ed]); 44 } 45 46 inline void print_test() { 47 for(int i=1;i<=m;++i) printf("%d ",val[i]); puts(""); 48 for(int i=1;i<=m;++i) printf("%d ",b[1][i]); puts(""); 49 for(int i=1;i<=m;++i) printf("%d ",b[2][i]); puts(""); 50 for(int i=1;i<=m;++i) printf("%d ",f[1][i]); puts(""); 51 for(int i=1;i<=m;++i) printf("%d ",f[2][i]); puts(""); 52 } 53 54 int main() 55 { 56 n=re_ad(),m=re_ad(); 57 st=(1<<n)-1,ed=0; 58 for(int i=1;i<=m;++i) { 59 scanf("%d%s%s",&val[i],p,q); 60 b[1][i]=b[2][i]=f[1][i]=f[2][i]=0; 61 for(int j=0;j<n;++j) { 62 if(p[j]=='+') b[1][i]|=(1<<j); 63 if(p[j]=='-') b[2][i]|=(1<<j); 64 if(q[j]=='+') f[2][i]|=(1<<j); 65 if(q[j]=='-') f[1][i]|=(1<<j); 66 } 67 } 68 // print_test(); 69 SPFA(); 70 return 0; 71 }

浙公网安备 33010602011771号