HDU 6614 AND Minimum Spanning
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的更多相关文章
- 多校 HDU - 6614 AND Minimum Spanning Tree (二进制)
传送门 AND Minimum Spanning Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 ...
- 【HDU 4408】Minimum Spanning Tree(最小生成树计数)
Problem Description XXX is very interested in algorithm. After learning the Prim algorithm and Krusk ...
- HDU 4408 Minimum Spanning Tree 最小生成树计数
Minimum Spanning Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- hdu 4408 Minimum Spanning Tree
Problem Description XXX is very interested in algorithm. After learning the Prim algorithm and Krusk ...
- 数据结构与算法分析–Minimum Spanning Tree(最小生成树)
给定一个无向图,如果他的某个子图中,任意两个顶点都能互相连通并且是一棵树,那么这棵树就叫做生成树(spanning tree). 如果边上有权值,那么使得边权和最小的生成树叫做最小生成树(MST,Mi ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- 第十届山东省acm省赛补题(1)
今天第一场个人训练赛的题目有点恐怖啊,我看了半个小时多硬是一道都不会写.我干脆就直接补题去了.... 先补的都是简单题,难题等我这周末慢慢来吧... A Calandar Time Limit: 1 ...
- python的浅复制,深复制
1.a = b是将b的id复制给b,然后a与b指向同一个对象 import numpy as np a = np.arange(5) print(a) b = a print(id(a)) print ...
- 【Qt开发】解决Qt5.7.0中文显示乱码的问题
[Qt开发]解决Qt5.7.0中文显示乱码的问题 亲测可用: 乱码主要是编码格式的问题,这里可以通过Edit菜单中选择当前文档的编码方式,选择按照UTF-8格式保存,然后输入对应的中文,保存,然后运行 ...
- iptables添加开放端口
查看状态 iptables -L -n 编辑/etc/sysconfig/iptables -A INPUT -p tcp -m tcp --dport 4000 -j ACCEPT 重启 servi ...
- [Python3] 002 Python3 中常用的命名规则
目录 1. 什么可以用来命名? 1.1 老三样: 字母.数字.下划线 1.2 其他 2. 什么不能用来命名? Python3 中的"关键字" 3. 命名"小贴士" ...
- windows系统IO性能测试
关键词:sql server io测试 下载链接:http://www.onlinedown.net/soft/57364.htm CrystalDiskMark(硬盘检测工具),一个测试你的硬盘或者 ...
- RHEL 无图形界面安装oracle 11gr2
RHEL7.3 无图形界面安装oracle 11gr2 使用纯命令安装方式.提供RHEL全量系统镜像. 1.oracle官方下载地址:https://www.oracle.com/techne ...
- Redis在Windows环境配置多实例多端口运行
Redis是一种跨平台NoSql内存数据库,这几年各大公司系统应用中非常多见,支持多种数据类型,可以持久化保存数据,很多公司直接拿来作为数据库使用. 相比于Memcached,Redis支持持久化保存 ...
- Windows下图文详解Mongodb安装及配置
这两天接触了MongoDB数据库,发现和mysql数据库还是有很大差别的,同时使用前的配置看起来有些繁杂,踩过不少坑,其实只要一步一步搞清了,并不难. 接下来,我就整理下整个安装及配置过程. 安装的M ...
- numpy.random.randn()和numpy.random.rand()
1 numpy.random.rand() (1)numpy.random.rand(d0,d1,…,dn) rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1 dn表格每个维度 返回 ...