• hdu多校第四场1001 (hdu6614) AND Minimum Spanning Tree 签到


    题意:

    一个完全图,某两点边权为这两点编号之按位与,求最小生成树,输出字典序最小的。

    题解:

    如果点数不为$2^n-1$,则每一点均可找到一点,两点之间边权为0,只需找到该点二进制下其最左边的0是第几位,与此位为1,其他位都为0的点相连,此边边权为0。

    否则,第$2^n-1$点以此法找到的最小点是$2^n$,此点不存在,则$2^n-1$只能与1相连,得到边权为1。其他边都是0,总共得生成树边权和为1。

    #include<iostream>
    using namespace std;
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            int n;
            scanf("%d",&n);
    //        int ans=0;
            int k=n+1;
            
            while(k>1){
                if(k%2){
                    printf("0
    ");
                    goto B;
                }
                k/=2;
            }
            printf("1
    ");
            
            B:;
            for(int i=2;i<=n;i++){
    //            printf("%d:",i);
                
                for(int j=1;j<=n;j<<=1){
                    if( (i&j) ==0){
                        printf("%d",j);
                        goto A; 
                    }
                }
                
                printf("1");
    //            ans++;
    A:;
                if(i<n)printf(" ");
                
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    hdu 1286
    hdu 1420
    hdu 2068
    hdu 1718
    hdu 1231
    hdu 1072
    HDOJ 350留念
    hdu 1898
    hdu 1593
    帮助理解git的图
  • 原文地址:https://www.cnblogs.com/isakovsky/p/11279816.html
Copyright © 2020-2023  润新知