zoukankan      html  css  js  c++  java
  • 2020牛客寒假算法基础集训营2 建通道

    https://ac.nowcoder.com/acm/contest/3003/I

    题意

      有 n 个星球,第 i 个星球有权值 vi
      任意两个星球之间均可以建立传送通道,不过花费并不一样。第 i 个星球与第 j 个星球的之间建立传送通道的花费是 lowbit(vivj)。
      要使这 n 个星球相互可达,需要的花费最少是多少。

    题解

      位运算。首先将权值去重(权值相等的点连接代价为 0 ),设去重后有 m 个点,接下来找到最小的二进制位 k ,满足存在 vi 的这个二进制位是 0 且存在 vj 的这个二进制位是 1 ,答案就是 2^k×(m1) (相当于所有这位是 0 的点与 j 点连边,是 1 的点与 i 点连边)。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int w,n,i,v1=0,v0=0x7fffffff;
        long long ans=0;
        set<int> seti;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&w);
            seti.insert(w);
            v1|=w;
            v0&=w;
        }
        v1^=v0;
        for(i=0;i<=30;i++)
        {
            if((1<<i)&v1)
            {
                ans=(seti.size()-1)*(1<<i);
                break;
            }
        }
        printf("%lld",ans);
        system("pause");
        return 0;
    }
  • 相关阅读:
    DRF
    DRF
    DRF
    DRF
    DRF
    DRF
    DRF
    Mongo错误记录:MongoClient opened before fork. Create MongoClient
    Hive默认分隔符和默认NULL值
    hdfs文件格式比较
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/12326577.html
Copyright © 2011-2022 走看看