题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6614

题目大意是有一张n个点的完全图,n个点点权为1-n,边权为两点点权按位与(&)。求最小生成树的边权和以及每个点的父节点。

由于边权为点权相与,则每个点如果可以找到他二进制位下0的最小位所代表的十进制数则两点边权为0。

例如1010(10)的最小位0(即右数第二位)所代表的十进制数0010(2),则10与2相连。

特殊情况为1111(15)的最小位0(即右数第5位)所代表的的十进制数为10000(16),要判断此处16是否存在,如果不存在则选择0001(1)与之相连,边权为1。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<string>
 5 #include<cmath>
 6 #include<vector>
 7 #define lson l, mid, i<<1
 8 #define rson  mid + 1, r, i<<1|1
 9 using namespace std;
10 typedef long long ll;
11 const int maxn = 2e5 + 10;
12 int fa[maxn];
13 int lowbit(int x) { return x & (-x); }
14 int qpow(ll a, ll b) {
15     ll ans = 0;
16     while (b) {
17         if (b & 1)
18             ans = ans * a;
19         a = a * a;
20         b /= 2;
21     }
22     return ans;
23 }
24 int main() {
25     int t;
26     scanf("%d", &t);
27     while (t--) {
28         int n;
29         scanf("%d", &n);
30         int Max = qpow(2, 60) - 1, ans = 0;
31         for (int i = 2; i <= n; i++) {
32             if (i % 2) {
33                 if (lowbit(i) == i) continue;
34                 int fat = lowbit((~i) &Max);
35                 if (fat > n)fa[i] = 1, ans++;
36                 else fa[i] = fat;
37             }
38             else
39                 fa[i] = 1;
40         }
41         printf("%d\n", ans);
42         for (int i = 2; i <= n; i++)
43             printf("%d%c", fa[i], i == n ? '\n' : ' ');
44     }
45 }

转载于:https://www.cnblogs.com/sainsist/p/11348741.html

[2019杭电多校第四场][hdu6614]AND Minimum Spanning Tree(贪心)相关推荐

  1. 2019杭电多校 第七场 Kejin Player 6656(求期望值)

    2019杭电多校 第七场 Kejin Player 6656(求期望值) 题目 http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意 给你n,q.表示有n ...

  2. 2019杭电多校第9场1002 Rikka with Cake HDU6681

    2019杭电多校第9场1002 Rikka with Cake HDU6681 题意:给你若干个点按上下左右切割平面,最后问平面内有几块被切割开来. 解法1:红黑树+思维+贪心 A:根据欧拉定理可以得 ...

  3. 杭电多校第四场-H- K-th Closest Distance

    题目描述 You have an array: a1, a2, , an and you must answer for some queries. For each query, you are ...

  4. 【2019.08.21】2019杭电多校第十场

    补题地址:http://acm.hdu.edu.cn/listproblem.php?vol=58 题号:6691-6701 1001: 1002: 1003:✅ 1004: 1005:✅ 1006: ...

  5. 2019 杭电多校第六场 题解

    比赛记录 注意随机数据 ,1-n排列这种,一般都有啥暴力重构之类的方法,期望重构次数很少之类的 1005也是这样,因为n^2但只有n个值有数,所以就可以n^2logn 题解 1001 Salty Fi ...

  6. 2019杭电多校第三场 6608 Fansblog(威尔逊定理+miller_rabin素性测试)

    Problem Description 传送门 Farmer John keeps a website called 'FansBlog' .Everyday , there are many peo ...

  7. 2019 杭电 多校第3场 1006 Fansblog (HDU 6608)

    题目链接 题解: 用威尔逊定理变换,然后求逆元. 代码: #include <bits/stdc++.h> using namespace std; typedef long long l ...

  8. hdu 6656 2019杭电多校第7场 期望题

    设f[i]为从i升级到i+1期望需要的金钱,由于每级都是能倒退或者升级到i+1,所以询问从l,r的期望金钱可以直接前缀和,那么推导每一级升级需要的期望钱也可以用前缀和推导 设sum[i]=f[1]+f ...

  9. 2019杭电多校第7场 K Kejin Player HDU 6656(数学推导)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6656 题目大意:对于每一个等级,可以花ai元,有pi概率升级,如果升级失败就退到xi级,问从li级升到 ...

  10. 2019杭电多校第七场 HDU - 6656 Kejin Player 期望

    题目链接:https://vjudge.net/problem/HDU-6656 题解: 维护一个前缀sum[i] : 从1到 i 的期望 第 i 到达 i + 1是:ai + (1 - r[i] / ...

最新文章

  1. 2021年春季学期-信号与系统-第九次作业参考答案-第五小题
  2. CycleGAN作者朱俊彦宣布重返CMU,担任助理教授
  3. 【百战GAN】新手如何开始你的第一个生成对抗网络(GAN)任务
  4. 大咖说:React Native 全埋点实现原理(内附赠书)
  5. docker启动失败,报docker dead but pid file exists,处理方式
  6. Android Fragment 生命周期及其正确使用(建议使用自定义View替换Fragment)
  7. “Python简直万能!”拜托快醒醒!
  8. [HNOI 2010]Planar
  9. SO_LINGER和优雅关闭连接
  10. [swift] LeetCode 94. Binary Tree Inorder Traversal
  11. 大学计算机课程复习--软件工程
  12. 错误: 找不到或无法加载主类 Demo
  13. Verilog并行加法树实现
  14. 群晖经典第三方套件_强烈推荐群晖下载套件玩物下志
  15. android粘贴,Android复制粘贴到剪贴板
  16. Android高性能日志模块-Xlog 正篇
  17. Rainbow 开发 step1
  18. 制作MacOS U盘安装盘教程
  19. 自选项目--手机锁屏软件--NABC分析
  20. 老虎证券开放api返回信息太长太啰嗦,返回值与账户api请求对应

热门文章

  1. HDOJ 1394 Minimum Inversion Number
  2. 用Asp.net制作顶部导航控件
  3. 程序员的英语水平要达到什么程度才行?
  4. 地震预警,生死十秒,我们能做些什么?
  5. 时间序列分析工具箱——tidyquant
  6. Nios内部RAM固化配置
  7. FPGA实现任意分频 为所欲为——教你什么才是真正的任意分频
  8. 因程序问题引起的服务器CPU负荷一直保持在90%以上
  9. mysql TIMESTAMP 报错
  10. 自己编写的Java获取CRC16校验码