zoukankan      html  css  js  c++  java
  • HDU 5765 Bonds 巧妙状压暴力

    题意:给一个20个点无向连通图,求每条边被多少个极小割集包括

    分析:极小割集是边的集合,很显然可以知道,极小割集恰好吧原图分成两部分(这个如果不明白可以用反证法)

            然后就是奉上官方题解:http://bestcoder.hdu.edu.cn/blog/ 2016多校训练第4场1003

            其实大体思路就是每次枚举一种可能的割集,即状压枚举,其中有不合法的,可以通过预处理标记所有的合法状态

            剩下的就是贴代码了,好好看代码细节才是最重要的

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <iostream>
    #include <algorithm>
    #include <map>
    #include <queue>
    #include <vector>
    using namespace std;
    typedef  long long LL;
    const int N = (1<<20)+5;
    int g[N],sum[N],T,kase,n,m,u[205],v[205],tot;
    bool can[N];
    queue<int>q;
    inline int lowbit(int x){return x&(-x);}
    int main(){
      scanf("%d",&T);
      while(T--){
        scanf("%d%d",&n,&m),tot=1<<n;
        memset(g,0,sizeof(g));
        memset(can,false,sizeof(can));
        memset(sum,0,sizeof(sum));
        for(int i=0;i<m;++i){
          scanf("%d%d",&u[i],&v[i]);
          g[1<<u[i]]|=1<<v[i];
          g[1<<v[i]]|=1<<u[i];
        }
        for(int i=1;i<tot;++i)
          g[i]|=g[i-lowbit(i)]|g[lowbit(i)];
        for(int i=0;i<n;++i)q.push(1<<i),can[1<<i]=true;
        while(!q.empty()){
          int u=q.front();q.pop();
          int go=g[u]^(g[u]&u);
          while(go){
            int to=lowbit(go)|u;
            if(!can[to])q.push(to),can[to]=true;
            go-=lowbit(go);
          }
        }
        int all=0;
        for(int i=1;i<tot;++i){
          int j=(tot-1)^i;
          if(i<j&&can[i]&&can[j]){
            ++sum[i];++sum[j];++all;
          }
        }
        for(int j=0;j<n;++j){
          for(int i=tot-1;i>0;--i)
           if(!(i&(1<<j)))sum[i]+=sum[i^(1<<j)];
        }
        printf("Case #%d:",++kase);
        for(int i=0;i<m;++i)
         printf(" %d",all-sum[(1<<u[i])|(1<<v[i])]);
        printf("
    "); 
      }
      return 0;
    }
    View Code
  • 相关阅读:
    HttpWebRequest中的ContentType详解
    c# 创建Windows服务
    转载 Url编码
    在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。
    IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字
    Response.ContentLength获取文件大小
    unable to instantiate activity...
    查看android-support-v4.jar引出的问题
    导入项目 R.java没有
    初识python: 局部变量、全局变量
  • 原文地址:https://www.cnblogs.com/shuguangzw/p/5721536.html
Copyright © 2011-2022 走看看