码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-08-01 00:11:56      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:题意   while   include   一点   --   names   goto   main   using   

题意:

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

题解:

如果点数不为$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\n");
                goto B;
            }
            k/=2;
        }
        printf("1\n");
        
        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("\n");
    }
    return 0;
}

 

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

标签:题意   while   include   一点   --   names   goto   main   using   

原文地址:https://www.cnblogs.com/isakovsky/p/11279816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!