博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AtCoder Regular Contest 102 D - All Your Paths are Different Lengths
阅读量:6771 次
发布时间:2019-06-26

本文共 1162 字,大约阅读时间需要 3 分钟。

思路:

二进制构造

首先找到最大的t,使得2^t <= l

然后我们就能构造一种方法使得正好存在 0 到 2^t - 1 的路径

方法是:对于节点 i 到 i + 1,添加两条边,一条边权值是2^(i-1),一条边权值是0

对于剩下的2^t 到 l-1的路径,我们考虑倍增地求,每次添加一条节点 v 到 节点 n 的边,边的权值是 X ,新增的路径是X 到 X + 2^(v-1) - 1

第一次的X是 2^t,之后每次倍增X增加 2^v,使得 X + 2^v <= l 

代码:

#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include
using namespace std;#define fi first#define se second#define pi acos(-1.0)#define LL long long//#define mp make_pair#define pb push_back#define ls rt<<1, l, m#define rs rt<<1|1, m+1, r#define ULL unsigned LL#define pll pair
#define pii pair
#define piii pair
#define mem(a, b) memset(a, b, sizeof(a))#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);//headvector
ans;int main() { int l, t, n; scanf("%d", &l); for (int i = 25; ; i--) { if((1<
<= l) { t = i; n = t+1; break; } } for (int i = 1; i <= t; i++) { ans.pb({ {i, i+1}, 1<
= 1; i--) { if((1<
<= res) { res -= 1<

 

转载于:https://www.cnblogs.com/widsom/p/9589283.html

你可能感兴趣的文章
javascript时间格式化
查看>>
Spring MVC基础
查看>>
linux运维实战练习-2015年8月30日课程作业(练习)安排
查看>>
给新手的最佳类Windows界面的Linux发行版
查看>>
Centos7下按照配置nexus2
查看>>
EC2上源安装vnstat
查看>>
我的友情链接
查看>>
CentOS 6网卡名称修改 以及 centos7 采用传统命名方式
查看>>
Zookeeper之——关于Zookeeper的那些事
查看>>
iOS中cell自适应高度
查看>>
蒲京博士为第七届环海南岛国际大帆船赛创造历史
查看>>
记一次负载均衡+NFS博客站点搭建的总结
查看>>
我不再像两年前那样勇敢
查看>>
计算机linux系统 第一课
查看>>
8月27日科技联播:滴滴5000亿上市计划或受影响,高德地图暂时下线顺风车业务...
查看>>
网站漏洞修复对phpmyadmin防止被入侵提权的解决办法
查看>>
Exchange 2013服务器常用的性能监视器
查看>>
详解linux运维工程师入门级必备技能
查看>>
ElsticStake安装之Logstash6.4.0 安装(二)
查看>>
XenServer安装最佳实践
查看>>