CF1479C Continuous City

题意:

给定 L, R. 构造一个有向带权图, 其中点数不大于 32, 且所有边都是从较小的点指向较大的点. 假设这个有向图有 n 个点, 你需要保证从 1到n 的所有路径的权值都在 [L, R]内且不存在 x∈[L,R], 使得不存在或存在多于一条从 1 到 n 的路径权值为 x, 或者断言这是不可能的.

题解:

点数不超过32,其实就在往二进制的方向引,但是想了半天也没头绪
看了海量题解,终于悟出一些
参考文章
首先无论如何都有解,log2(1e6)=19.931569log_{2}(1e6)=19.931569log2​(1e6)=19.931569,一共用22个点就够了(20个中间点+出发点+结束点)
题目要求构造值域为[L,R]的路径长度,我们先从1号点向所有点连一条长度为L的边,现在的问题就是如何构造出值域[1,R-L]的路径长度
对于所有中间点i∈[2,21]i \in[2,21]i∈[2,21],我们可以认为第i个点代表二进制的第i-2位,从i号点向其他点(不含结束点)连一条长度为2i−22^{i-2}2i−2的边
如图,(相同颜色权值一样,绿色和黄色未画完全),点2到点21可以表示出路径长度的值域为[1,2i−2−1][1,2^{i-2}-1][1,2i−2−1],你可以这么理解,二进制下,走一条边相当于对应的第i-2位是1,如果你从2走到3,在走到4,相当于权值为111(二进制),如果一直走到点21,权值不就是2i−2−12^{i-2}-12i−2−1
再加上之前的L,此时1→i的路径长度值域为[L,L+2i−2−1][L,L+2^{i-2}-1][L,L+2i−2−1]

现在问题在于L+2i−2−1L+2^{i-2}-1L+2i−2−1又不是R,现在我们开始考虑如何凑出R-L
(还是先忽略L),我们用第22号点当作n号点
枚举i∈[2,21]i\in[2,21]i∈[2,21],如果R-L第i-2位是1,令t表示将R-L末i-2位都修改为0后的值,然后我们就从i向n号点连一条权值为t+1的边。可以理解成我们将缺失那部分拆成两部分,一部分可以用之前已经构造好的二进制来实现,另一部分作为权值再建新边,这样组合正好就是我们需要的值
一下01都是二进制下,
比如R-L值为101(二进制),第0位是1,所以我们就从点2向点22建边,边权为101-1+1,第2位是1,所以我们从点4向点22建边,边权为101-101+1,这样我们就可以构造出[L,R]。因为我之前构造边权都是点2到点21之间的,现在R-L的第i位是1,就将第i-2个点连向n,因为第i+2个点最大值域到2i−22^{i-2}2i−2,所以边权为(R−L)−2i−2+1(R-L)-2^{i-2}+1(R−L)−2i−2+1
比如样例[4,9],根据我讲的方法构造如图:

感性再理解理解,确实不好想

代码:

#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{#ifdef ONLINE_JUDGE
#elsestartTime = clock ();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
int L,R,cnt,tot;
const int maxn=2e6+9;
struct node{int x,y,z;
};
vector<node>vec;
int main()
{scanf("%d%d",&L,&R);puts("YES");vec.push_back({1,22,L});//从1号点向n号点连边for(int i=1;i<=20;++i){for(int j=i+1;j<=21;++j){int t;if(i!=1)t=1<<i-2;else t=L;vec.push_back({i,j,t});//从1~20号点向之后除n号点以外的点连边}}int t=R-L;for(int i=2;i<=21;++i){if(t>>(i-2)&1){t^=(1<<i-2);vec.push_back({i,22,t+1});}}printf("22 %d\n",vec.size());for(int i=0;i<vec.size();i++){printf("%d %d %d\n",vec[i].x,vec[i].y,vec[i].z);}return 0;//输出构造方案
}

CF1479C Continuous City相关推荐

  1. Codeforces Round #700 (Div. 1) C. Continuous City 构造 + 二进制

    传送门 文章目录 题意: 思路: 题意: 构造一个图,使其从111到nnn的路径的长度与[L,R][L,R][L,R]中某个值一一对应,不能有两条路径长度一样,且每个值都必须出现一次,每两个点之间只能 ...

  2. Codeforces Round #700 (Div. 2) A ~ E ,6题全,超高质量良心题解【每日亿题】2021/2/8

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Yet Another String Game B - The Great Hero C ...

  3. Codeforces Round #700 (Div. 1Div. 2)

    Codeforces Round #700 (Div. 1&&Div. 2) 题号 题目 知识点 A Yet Another String Game 签到 B The Great He ...

  4. Codeforces Round #700 (Div. 2)全部题解

    题目链接:https://codeforces.com/contest/1480 文章目录 A.Yet Another String Game B.The Great Hero C.Searching ...

  5. ue4商城素材 Cyberpunk City / Recife Environment 赛博朋克城市场景

    ue4商城素材 Cyberpunk City / Recife Environment 赛博朋克城市场景 ue4商城素材 Cyberpunk City / Recife Environment 赛博朋 ...

  6. 多尺度的CityNeRF: Building NeRF at City Scale

    作者丨黄浴@知乎 来源丨https://zhuanlan.zhihu.com/p/450671684 编辑丨3D视觉工坊 arXiv在2021年12月17日上传论文"CityNeRF: Bu ...

  7. Error: Discrete value supplied to continuous scale

    Error: Discrete value supplied to continuous scale 目录 Error: Discrete value supplied to continuous s ...

  8. R语言问题解决:Error: Discrete value supplied to continuous scale

    R语言问题解决:Error: Discrete value supplied to continuous scale #仿真数据 set.seed(123) my_df1 <- data.fra ...

  9. ERROR while rich displaying an object: Error: Continuous value supplied to discrete scale

    ERROR while rich displaying an object: Error: Continuous value supplied to discrete scale 目录 ERROR w ...

最新文章

  1. Android笔记之ViewModel的使用示例
  2. 注意力是智力的五个基本因素之一
  3. Linux操作系统报:read-only file system
  4. leetcode刷题:2.两数之和
  5. 分布式作业 Elastic Job 如何动态调整?
  6. PSD缩略图的设置方法
  7. 2022高压电工操作证考试题库及模拟考试
  8. 渗透测试全套教程(从原理到实战)
  9. 穿山甲广告。swift穿山甲广告40001报错
  10. 实名寻人搜索引擎app_谷歌搜索引擎寻人
  11. Git使用小技巧之挑拣合并
  12. google浏览器Chrome部署HttpWatch
  13. 深踩 AndroidStudio 缓存的坑
  14. amc 美国数学竞赛能用计算机吗,美国数学竞赛AMC的三种级别
  15. Java方法创建及调用--------06
  16. 微软VS2010广告全集,让程序员们内牛满面
  17. Matplotlib数据可视化之堆叠图、饼图(plt.stackplot\plt.pie)
  18. 跨域访问, 小小的总结.
  19. 欧拉计划(鱼C论坛)@20161107
  20. 100种思维模型之风险概率思维模型-021

热门文章

  1. 已婚男人看见美女都这个眼神?
  2. 乔布斯死后的300亿遗产终于被败光了,没想到竟是干了这件事
  3. 一定要多角度看事物 | 今日最佳
  4. 技巧:Excel用得好,天天没烦恼
  5. 《SAS编程与数据挖掘商业案例》学习笔记之四
  6. java编写算术平均数,[求助]基础-怎样编一个计算算术平均数的程序(急啊)
  7. 多个查询语句能否一次把结果导出_mysql表中base64格式数据查询
  8. svn强制注释 linux,svn强制要求提交注释
  9. 服务器运维监控指标,运维体系~指标监控~Prometheus监控告警与日志
  10. 怎么用计算机计算出选手最后得分,WPS技巧:TRIMMEAN函数计算选手得分