Time limit 1000 ms

Memory limit 131072 kB

OS Windows

中文题意

给一张n个点的无向完全图(输入一个n就完事了),每个点标号为1n,每条边的边权为它的两个端点的标号做按位与。现在要求这个图的最小生成树,输出这棵树以1为根时2n总共n-1个点的父亲节点的标号(为啥不是母亲)。要求在该树边权和最小的前提下,输出的数据字典序最小。

解题思路

以1为根,那就把1固定下来吧。

对于所有偶数点,肯定要以1为父亲,因为首先边权为0,其次因为字典序最小的要求,1是它们可以连到的编号最小的父亲。

对于所有奇数点,我们肯定希望它连接到父亲的边权是0,那么它和父亲的二进制位就不能有同时为1的地方。又因为字典序最小的要求,它能连接到的边权为0、标号最小的父亲是哪位呢?我们想到了lowbit,我们可以将该奇数点编号取反,然后强行将最高位符号位置0,再求lowbit,就得到了我们希望它连接的父亲。换句话说,一个奇数点x的父亲应该是

lowbit(0x7fffffff&(~x))

比如对于13号点,二进制为1101,它的父亲就应该是0010。还没完,假设总共有7个点,那么7号点的父亲是谁呢?按照上面的分析,应该是8号点,但是没有8号点,而且因为7的二进制是0111,无论连到其他哪个点上边权都不为0,所以要让权值最小,我们只能把这种理论父亲不存在的点连接到1号点。

源代码

#include<stdio.h>

int T;
int n;
long long sum;
int fa[200010];
inline int lowbit(int x){return x&-x;}
int main()
{
scanf("%d",&T);
while(T--)
{
sum=0;
scanf("%d",&n);
for(int i=2;i<=n;i+=2) fa[i]=1;
for(int i=3;i<=n;i+=2)
{
if(lowbit(i)==i) continue;
int lowzero=lowbit((~i)&0x7fffffff);//求理论父亲
if(lowzero>n) sum++,fa[i]=1;//理论父亲不存在
else fa[i]=lowzero;
}
printf("%d\n%d",sum,fa[2]);//这题卡PE艹
for(int i=3;i<=n;i++)
printf(" %d",fa[i]);
puts("");
}
return 0;
}

HDU 6614 AND Minimum Spanning的更多相关文章

  1. 多校 HDU - 6614 AND Minimum Spanning Tree (二进制)

    传送门 AND Minimum Spanning Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 ...

  2. 【HDU 4408】Minimum Spanning Tree(最小生成树计数)

    Problem Description XXX is very interested in algorithm. After learning the Prim algorithm and Krusk ...

  3. HDU 4408 Minimum Spanning Tree 最小生成树计数

    Minimum Spanning Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  4. hdu 4408 Minimum Spanning Tree

    Problem Description XXX is very interested in algorithm. After learning the Prim algorithm and Krusk ...

  5. 数据结构与算法分析–Minimum Spanning Tree(最小生成树)

    给定一个无向图,如果他的某个子图中,任意两个顶点都能互相连通并且是一棵树,那么这棵树就叫做生成树(spanning tree). 如果边上有权值,那么使得边权和最小的生成树叫做最小生成树(MST,Mi ...

  6. Educational Codeforces Round 3 E. Minimum spanning tree for each edge LCA/(树链剖分+数据结构) + MST

    E. Minimum spanning tree for each edge   Connected undirected weighted graph without self-loops and ...

  7. CF# Educational Codeforces Round 3 E. Minimum spanning tree for each edge

    E. Minimum spanning tree for each edge time limit per test 2 seconds memory limit per test 256 megab ...

  8. Codeforces Educational Codeforces Round 3 E. Minimum spanning tree for each edge LCA链上最大值

    E. Minimum spanning tree for each edge 题目连接: http://www.codeforces.com/contest/609/problem/E Descrip ...

  9. MST(Kruskal’s Minimum Spanning Tree Algorithm)

    You may refer to the main idea of MST in graph theory. http://en.wikipedia.org/wiki/Minimum_spanning ...

随机推荐

  1. 【MM系列】SAP MM模块-收货自动创建采购订单

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-收货自动创建采购订 ...

  2. Springcloud 2.x 版本 分布式配置中心

    一.什么是分布式配置中心? 就是为微服务架构中的微服务提供集中化的外部配置支持,配置中心为各个微服务应用的所有环境提供了中心化的外部配置(可能比较难理解,想知道是什么意思就要知道为什么这么配置:这么配 ...

  3. arm初识

    一.CPU从指令集角度分类 1.1. CISC  (X86) 1.1. 1. CISC CPU 指complex instruction set computer复杂指令集CPU 1.1.2. CIS ...

  4. linux下安装phpunit

    安装pear 的命令如下: $ wget http://pear.php.net/go-pear.phar $ php go-pear.phar 如果报出PHP Warning:  file_exis ...

  5. 破解mysql

    https://blog.csdn.net/lian_easel/article/details/78734240 破解mysql

  6. 如何使用js在移动端和PC端居中

    在手机移动端和PC端控制居中是一个很蛋痛的问题,因为屏幕宽度在变化,所以就不要写死样式,那么我想用JS来控制,灵活的控制宽度,需要注意这三个时候: (1)首先需要在页面刚加载的时候就调用此函数, (2 ...

  7. vue设置全局样式变量 less

    1.第一步: npm install sass-resources-loader --save-dev 2.然后在build 的utils.js中exports.cssLoaders = functi ...

  8. 深度学习之(经典)卷积层计算量以及参数量总结 (考虑有无bias,乘加情况)

    目录: 1.经典的卷积层是如何计算的 2.分析卷积层的计算量 3.分析卷积层的参数量 4.pytorch实现自动计算卷积层的计算量和参数量 1.卷积操作如下: http://cs231n.github ...

  9. 浏览器常用12种兼容问题(JS)

    //1.滚动条到顶端的距离(滚动高度) var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; / ...

  10. Vue之指令和绑定

    一.v-once指令 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&quo ...