• 网络流24题之软件补丁问题


    其实和网络流没啥关系。

    按状态用二进制跑spfa。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N=1<<21;
     4 int v[N],d[N],t[N],n,m;
     5 struct node{
     6     int b1,b2,f1,f2;
     7 }a[105];
     8 char s[25];
     9 queue<int>q;
    10 void spfa(int tmp)
    11 {
    12     memset(d,0x3f,sizeof(d));
    13     memset(v,0,sizeof(v));
    14     d[tmp]=0;v[tmp]=1;
    15     q.push(tmp);int inf=d[0];
    16     while(!q.empty())
    17     {
    18         int x=q.front();v[x]=0;q.pop();
    19         for(int i=1;i<=m;++i)
    20         {
    21             if(a[i].b2&x)continue;
    22             if((a[i].b1&x)!=a[i].b1)continue;
    23             int y=x^(x&a[i].f1)|a[i].f2;
    24             if(d[x]+t[i]<d[y])
    25             {
    26                 d[y]=d[x]+t[i];
    27                 if(!v[y])q.push(y),v[y]=1;
    28             }
    29         }
    30     }
    31     if(d[0]==inf)puts("0");
    32     else printf("%d
    ",d[0]);
    33     return;
    34 }
    35 int main()
    36 {
    37     scanf("%d%d",&n,&m);
    38     for(int i=1;i<=m;++i)
    39     {
    40         scanf("%d",&t[i]);
    41         scanf("%s",s);
    42         for(int j=0;j<n;++j)
    43         {
    44             if(s[j]=='+')a[i].b1|=(1<<j);
    45             if(s[j]=='-')a[i].b2|=(1<<j);
    46         }
    47         scanf("%s",s);
    48         for(int j=0;j<n;++j)
    49         {
    50             if(s[j]=='+')a[i].f2|=(1<<j);
    51             if(s[j]=='-')a[i].f1|=(1<<j);
    52         }
    53     }
    54     spfa((1<<n)-1);
    55     return 0;
    56 }
  • 相关阅读:
    Swift中函数
    Swift 中的开关语句switch在swift中的使用
    Swift 函数新特性
    Swift 学习-多线程
    安卓学习
    ios -网络
    ios 中block
    Lua 简易调试
    iOS、Cocos2dx、Unity3D下的坐标系统简介
    Lua开发过程中遇到的一些小问题
  • 原文地址:https://www.cnblogs.com/nbwzyzngyl/p/8359489.html
Copyright © 2020-2023  润新知