zoukankan      html  css  js  c++  java
  • AND Graph CodeForces

    题意:给出n
    (0n22)和m,和m个数ai≤ ≤ 20ai<2,把a& a== 0 的连边,求最后有几个连通块

    解析:一个一个去找肯定爆,那么就要转换一下思维,想一下什么样的数才能按位与ai为0

    那么肯定是a^ ((1<<n)-1)的子集,所以去找它的所有子集即可

    例1010  变成0101  子集有 0101  0100  0001

    然后只有x是给出的那m个数种的时候 才能 ^ ,其他情况消1取子集

    #include <bits/stdc++.h>
    #define mem(a, b) memset(a, b, sizeof(a))
    using namespace std;
    const int maxn = (1<<22) + 5, INF = 0x7fffffff;
    int n, m, res;
    int a[maxn], vis[maxn], inc[maxn];
    
    void dfs(int x)
    {
        if(vis[x]) return;
        vis[x] = 1;
        if(inc[x])
        {
            dfs(x^((1<<n)-1));
        }
        for(int i=0; i<n; i++)
        {
            if(x&(1<<i))
            {
                int temp = x^(1<<i);
                if(!vis[temp])
                {
                    dfs(temp);
                }
            }
        }
    }
    
    int main()
    {
        mem(vis, 0);
        mem(inc, 0);
        scanf("%d%d", &n, &m);
        res = 0;
        for(int i=0; i<m; i++)
        {
            scanf("%d", &a[i]);
            inc[a[i]] = 1;
        }
        for(int i=0; i<m; i++)
            if(!vis[a[i]])
            {
                vis[a[i]] = 1;
                res++;
                dfs(a[i]^((1<<n)-1));
            }
    
        cout<< res <<endl;
    
    
        return 0;
    }

     

     

    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    Vim
    CMake学习之路
    linux tree命令以树形结构显示文件目录结构
    代码阅读软件Understand安装
    ROS学习之ShadowRepository
    WPF初学(一)——布局【良好界面的基础】
    浅学JSON——Json.NET之首次试手
    JSON资料汇总
    自定义视图 视图控制器(UIViewController)
    UIView Subclass(UI,UIButton,UITextField,UILabel)
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/9526498.html
Copyright © 2011-2022 走看看