【Atcoder - ARC102D/ABC108D】All Your Paths are Different Lengths

构建一个满足特定条件的有向图,包含20个顶点,最多60条边,从顶点1到顶点N有L条不同长度的路径,路径长度在0到L-1之间且互不相同。通过二进制和重边策略来构造解决方案。
摘要由CSDN通过智能技术生成

@All Your Paths are Different Lengths@


@题目描述 - English@

Time limit : 2sec / Memory limit : 1024MB

Score : 700 points

Problem Statement
You are given an integer L. Construct a directed graph that satisfies the conditions below. The graph may contain multiple edges between the same pair of vertices. It can be proved that such a graph always exists.

The number of vertices, N, is at most 20. The vertices are given ID numbers from 1 to N.
The number of edges, M, is at most 60. Each edge has an integer length between 0 and 10^6 (inclusive).
Every edge is directed from the vertex with the smaller ID to the vertex with the larger ID. That is, 1,2,…,N is one possible topological order of the vertices.

There are exactly L different paths from Vertex 1 to Vertex N. The lengths of these paths are all different, and they are integers between 0 and L−1.
Here, the length of a path is the sum of the lengths of the edges contained in that path, and two paths are considered different when the sets of the edges contained in those paths are different.

Constraints
2≤L≤10^6
L is an integer.

Input
Input is given from Standard Input in the following format:
L

Output
In the first line, print N and M, the number of the vertices and edges in your graph. In the i-th of the following M lines, print three integers ui,vi and wi, representing the starting vertex, the ending vertex and the length of the i-th edge. If there are multiple solutions, any of them will be accepted.

Sample Input 1
4
Sample Output 1
8 10
1 2 0
2 3 0
3 4 0
1 5 0
2 6 0
3 7 0
4 8 0
5 6 1
6 7 1
7 8 1

In the graph represented by the sample output, there are four paths from Vertex 1 to N=8:
1 → 2 → 3 → 4 → 8 with length 0
1 → 2 → 3 → 7 → 8 with length 1
1 → 2 → 6 → 7 → 8 with length 2
1 → 5 → 6 → 7 → 8 with length 3
There are other possible solutions.

Sample Input 2
5
Sample Output 2
5 7
1 2 0
2 3 1
3 4 0
4 5 0
2 4 0
1 3 3
3 5 1

@大致题意@

构造一个 n 点 m 边的有向带权图,要求边必须从节点编号小的连向结点编号大的。允许重边。要使得从结点 1 到结点 n 恰好有 L 条路径,这 L 条路径的长度互不相同且在[0,L-1]范围内。
n<=20, m<=60, L<=10^6

@分析1@

【蛮有趣的构造题】
首先观察数据范围,发现2^20 = 1048576 ≈ 1000000 = 10^6……
你要说这是巧合我绝对不信。
然后,注意到题目特别提到了“重边”。
然后,“用几个数之和表示[0,L-1]的所有数”,如果单看这个没什么思路,但如果结合上面数据范围的话……
二进制表达。
两个点之间连两条边,权值分别为0与2^i。
大致的构造思路就差不多是这样,详细细节在下面。

@分析2@

我们不妨总是令n=20。
对于2<=i<=19的结点,我们i与i+1之间连两条边,一条权值为 0 0 ,一条权值为 2 20 i 1
这样,如果1号结点向i号结点连一条权值为w的边,那么从1到20就会出现 w+[0...220i1] w + [ 0...2 20 − i − 1 ] 的所有数。

接下来?我们不妨采用数位dp的思想。

假设将L转化成二进制形式,即令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MPJLambdaWrapper是一个用于处理分布式数据Java库。它提供了一种方便的方式来执行各种数据操作,包括内连接(inner join)和外连接(outer join)。 内连接是一种将两个数据集合中的匹配项组合在一起的操作。在MPJLambdaWrapper中,内连接可以通过使用`join`方法来实现。该方法接受两个数据集合作为输入,并返回一个包含匹配项的新数据集合。 下面是使用MPJLambdaWrapper进行内连接的示例代码: ```java import edu.indiana.soic.spidal.common.Range; import edu.indiana.soic.spidal.common.RangePartitioner; import edu.indiana.soic.spidal.common.RangePartitioner2D; import edu.indiana.soic.spidal.common.RangePartitioner3D; import edu.indiana.soic.spidal.common.RangePartitionerFactory; import edu.indiana.soic.spidal.common.RangePartitionerFactory2D; import edu.indiana.soic.spidal.common.RangePartitionerFactory3D; import edu.indiana.soic.spidal.common.RangePartitionerFactory4D; import edu.indiana.soic.spidal.common.RangePartitionerFactory5D; import edu.indiana.soic.spidal.common.RangePartitionerFactory6D; import edu.indiana.soic.spidal.common.RangePartitionerFactory7D; import edu.indiana.soic.spidal.common.RangePartitionerFactory8D; import edu.indiana.soic.spidal.common.RangePartitionerFactory9D; import edu.indiana.soic.spidal.common.RangePartitionerFactory10D; import edu.indiana.soic.spidal.common.RangePartitionerFactory11D; import edu.indiana.soic.spidal.common.RangePartitionerFactory12D; import edu.indiana.soic.spidal.common.RangePartitionerFactory13D; import edu.indiana.soic.spidal.common.RangePartitionerFactory14D; import edu.indiana.soic.spidal.common.RangePartitionerFactory15D; import edu.indiana.soic.spidal.common.RangePartitionerFactory16D; import edu.indiana.soic.spidal.common.RangePartitionerFactory17D; import edu.indiana.soic.spidal.common.RangePartitionerFactory18D; import edu.indiana.soic.spidal.common.RangePartitionerFactory19D; import edu.indiana.soic.spidal.common.RangePartitionerFactory20D; import edu.indiana.soic.spidal.common.RangePartitionerFactory21D; import edu.indiana.soic.spidal.common.RangePartitionerFactory22D; import edu.indiana.soic.spidal.common.RangePartitionerFactory23D; import edu.indiana.soic.spidal.common.RangePartitionerFactory24D; import edu.indiana.soic.spidal.common.RangePartitionerFactory25D; import edu.indiana.soic.spidal.common.RangePartitionerFactory26D; import edu.indiana.soic.spidal.common.RangePartitionerFactory27D; import edu.indiana.soic.spidal.common.RangePartitionerFactory28D; import edu.indiana.soic.spidal.common.RangePartitionerFactory29D; import edu.indiana.soic.spidal.common.RangePartitionerFactory30D; import edu.indiana.soic.spidal.common.RangePartitionerFactory31D; import edu.indiana.soic.spidal.common.RangePartitionerFactory32D; import edu.indiana.soic.spidal.common.RangePartitionerFactory33D; import edu.indiana.soic.spidal.common.RangePartitionerFactory34D; import edu.indiana.soic.spidal.common.RangePartitionerFactory35D; import edu.indiana.soic.spidal.common.RangePartitionerFactory36D; import edu.indiana.soic.spidal.common.RangePartitionerFactory37D; import edu.indiana.soic.spidal.common.RangePartitionerFactory38D; import edu.indiana.soic.spidal.common.RangePartitionerFactory39D; import edu.indiana.soic.spidal.common.RangePartitionerFactory40D; import edu.indiana.soic.spidal.common.RangePartitionerFactory41D; import edu.indiana.soic.spidal.common.RangePartitionerFactory42D; import edu.indiana.soic.spidal.common.RangePartitionerFactory43D; import edu.indiana.soic.spidal.common.RangePartitionerFactory44D; import edu.indiana.soic.spidal.common.RangePartitionerFactory45D; import edu.indiana.soic.spidal.common.RangePartitionerFactory46D; import edu.indiana.soic.spidal.common.RangePartitionerFactory47D; import edu.indiana.soic.spidal.common.RangePartitionerFactory48D; import edu.indiana.soic.spidal.common.RangePartitionerFactory49D; import edu.indiana.soic.spidal.common.RangePartitionerFactory50D; import edu.indiana.soic.spidal.common.RangePartitionerFactory51D; import edu.indiana.soic.spidal.common.RangePartitionerFactory52D; import edu.indiana.soic.spidal.common.RangePartitionerFactory53D; import edu.indiana.soic.spidal.common.RangePartitionerFactory54D; import edu.indiana.soic.spidal.common.RangePartitionerFactory55D; import edu.indiana.soic.spidal.common.RangePartitionerFactory56D; import edu.indiana.soic.spidal.common.RangePartitionerFactory57D; import edu.indiana.soic.spidal.common.RangePartitionerFactory58D; import edu.indiana.soic.spidal.common.RangePartitionerFactory59D; import edu.indiana.soic.spidal.common.RangePartitionerFactory60D; import edu.indiana.soic.spidal.common.RangePartitionerFactory61D; import edu.indiana.soic.spidal.common.RangePartitionerFactory62D; import edu.indiana.soic.spidal.common.RangePartitionerFactory63D; import edu.indiana.soic.spidal.common.RangePartitionerFactory64D; import edu.indiana.soic.spidal.common.RangePartitionerFactory65D; import edu.indiana.soic.spidal.common.RangePartitionerFactory66D; import edu.indiana.soic.spidal.common.RangePartitionerFactory67D; import edu.indiana.soic.spidal.common.RangePartitionerFactory68D; import edu.indiana.soic.spidal.common.RangePartitionerFactory69D; import edu.indiana.soic.spidal.common.RangePartitionerFactory70D; import edu.indiana.soic.spidal.common.RangePartitionerFactory71D; import edu.indiana.soic.spidal.common.RangePartitionerFactory72D; import edu.indiana.soic.spidal.common.RangePartitionerFactory73D; import edu.indiana.soic.spidal.common.RangePartitionerFactory74D; import edu.indiana.soic.spidal.common.RangePartitionerFactory75D; import edu.indiana.soic.spidal.common.RangePartitionerFactory76D; import edu.indiana.soic.spidal.common.RangePartitionerFactory77D; import edu.indiana.soic.spidal.common.RangePartitionerFactory78D; import edu.indiana.soic.spidal.common.RangePartitionerFactory79D; import edu.indiana.soic.spidal.common.RangePartitionerFactory80D; import edu.indiana.soic.spidal.common.RangePartitionerFactory81D; import edu.indiana.soic.spidal.common.RangePartitionerFactory82D; import edu.indiana.soic.spidal.common.RangePartitionerFactory83D; import edu.indiana.soic.spidal.common.RangePartitionerFactory84D; import edu.indiana.soic.spidal.common.RangePartitionerFactory85D; import edu.indiana.soic.spidal.common.RangePartitionerFactory86D; import edu.indiana.soic.spidal.common.RangePartitionerFactory87D; import edu.indiana.soic.spidal.common.RangePartitionerFactory88D; import edu.indiana.soic.spidal.common.RangePartitionerFactory89D; import edu.indiana.soic.spidal.common.RangePartitionerFactory90D; import edu.indiana.soic.spidal.common.RangePartitionerFactory91D; import edu.indiana.soic.spidal.common.RangePartitionerFactory92D; import edu.indiana.soic.spidal.common.RangePartitionerFactory93D; import edu.indiana.soic.spidal.common.RangePartitionerFactory94D; import edu.indiana.soic.spidal.common.RangePartitionerFactory95D; import edu.indiana.soic.spidal.common.RangePartitionerFactory96D; import edu.indiana.soic.spidal.common.RangePartitionerFactory97D; import edu.indiana.soic.spidal.common.RangePartitionerFactory98D; import edu.indiana.soic.spidal.common.RangePartitionerFactory99D; import edu.indiana.soic.spidal.common.RangePartitionerFactory100D; import edu.indiana.soic.spidal.common.RangePartitionerFactory101D; import edu.indiana.soic.spidal.common.RangePartitionerFactory102D; import edu.indiana.soic.spidal.common.RangePartitionerFactory103D; import edu.indiana.soic.spidal.common.RangePartitionerFactory104D; import edu.indiana.soic.spidal.common.RangePartitionerFactory105D; import edu.indiana.soic.spidal.common.RangePartitionerFactory106D; import edu.indiana.soic.spidal.common.RangePartitionerFactory107D; import edu.indiana.soic.spidal.common.RangePartitionerFactory108D; import edu.indiana.soic.spidal.common.RangePartitionerFactory109D; import edu.indiana.soic.spidal.common.RangePartitionerFactory110D; import edu.indiana.soic.spidal.common.RangePartitionerFactory111D; import edu.indiana.soic.spidal.common.RangePartitionerFactory112D; import edu.indiana.soic.spidal.common.RangePartitionerFactory113D; import edu.indiana.soic.spidal.common.RangePartitionerFactory114D; import edu.indiana.soic.spidal.common.RangePartitionerFactory115D; import edu.indiana.soic.spidal.common.RangePartitionerFactory116D; import edu.indiana.soic.spidal.common.RangePartitionerFactory117D; import edu.indiana.soic.spidal.common.RangePartitionerFactory118D; import edu.indiana.soic.spidal.common.RangePartitionerFactory119D; import edu.indiana.soic.spidal.common.RangePartitionerFactory120D; import edu.indiana.soic.spidal.common.RangePartitionerFactory121D; import edu.indiana.soic.spidal.common.RangePartitionerFactory122D; import edu.indiana.soic.spidal.common.RangePartitionerFactory123D; import edu.indiana.soic.spidal.common.RangePartitionerFactory124D; import edu.indiana.soic.spidal.common.RangePartitionerFactory125D; import edu.indiana.soic.spidal.common.RangePartitionerFactory126D; import edu.indiana.soic.spidal.common.RangePartitionerFactory127D; import edu.indiana.soic.spidal.common.RangePartitionerFactory128D; import edu.indiana.soic.spidal.common.RangePartitionerFactory129D; import edu.indiana.soic.spidal.common.RangePartitionerFactory130D; import edu.indiana.soic.spidal.common.RangePartitionerFactory131D; import edu.indiana.soic.spidal.common.RangePartitionerFactory132D; import edu.indiana.soic.spidal.common.RangePartitionerFactory133D; import edu.indiana.soic.spidal.common.RangePartitionerFactory134D; import edu.indiana.soic.spidal.common.RangePartitionerFactory135D; import edu.indiana.soic.spidal.common.RangePartitionerFactory136D; import edu.indiana.soic.spidal.common.RangePartitionerFactory137D; import edu.indiana.soic.spidal.common.RangePartitionerFactory138D; import edu.indiana.soic.spidal.common.RangePartitionerFactory139D; import edu.indiana.soic.spidal.common.RangePartitionerFactory140D; import edu.indiana.soic.spidal.common.RangePartitionerFactory141D; import edu.indiana.soic.spidal.common.RangePartitionerFactory142D; import edu.indiana.soic.spidal.common.RangePartitionerFactory143D; import edu.indiana.soic.spidal.common.RangePartitionerFactory144D; import edu.indiana.soic.spidal.common.RangePartitionerFactory145D; import edu.indiana.soic.spidal.common.RangePartitionerFactory146D; import edu.indiana.soic.spidal.common.RangePartitionerFactory147D; import edu.indiana.soic.spidal.common.RangePartitionerFactory148D; import edu.indiana.soic.spidal.common.RangePartitionerFactory149D; import edu.indiana.soic.spidal.common.RangePartitionerFactory150D; import edu.indiana.soic.spidal.common.RangePartitionerFactory151D; import edu.indiana.soic.spidal.common.RangePartitionerFactory152D; import edu.indiana.soic.spidal.common.RangePartitionerFactory153D; import edu.indiana.soic.spidal.common.RangePartitionerFactory154D; import edu.indiana.soic.spidal.common.RangePartitionerFactory155D; import edu.indiana.soic.spidal.common.RangePartitionerFactory156D; import edu.indiana.soic.spidal.common.RangePartitionerFactory157D; import edu.indiana.soic.spidal.common.RangePartitionerFactory158D; import edu.indiana.soic.spidal.common.RangePartitionerFactory159D; import edu.indiana.soic.spidal.common.RangePartitionerFactory160D; import edu.indiana.soic.spidal.common.RangePartitionerFactory161D; import edu.indiana.soic.spidal.common.RangePartitionerFactory162D; import edu.indiana.soic.spidal.common.RangePartitionerFactory163D; import edu.indiana.soic.spidal.common.RangePartitionerFactory164D; import edu.indiana.soic.spidal.common.RangePartitionerFactory165D; import edu.indiana.soic.spidal.common.RangePartitionerFactory166D; import edu.indiana.soic.spidal.common.RangePartitionerFactory167D; import edu.indiana.soic.spidal.common.RangePartitionerFactory168D; import edu.indiana.soic.spidal.common.RangePartitionerFactory169D; import edu.indiana.soic.spidal.common.RangePartitionerFactory170D; import edu.indiana.soic.spidal.common.RangePartitionerFactory171D; import edu.indiana.soic.spidal.common.RangePartitionerFactory172D; import edu.indiana.soic.spidal.common.RangePartitionerFactory173D; import edu.indiana.soic.spidal.common.RangePartitionerFactory174D; import edu.indiana.soic.spidal.common.RangePartitionerFactory175D; import edu.indiana.soic.spidal.common.RangePartitionerFactory176D; import edu.indiana.soic.spidal.common.RangePartitionerFactory177D; import edu.indiana.soic.spidal.common.RangePartitionerFactory178D; import edu.indiana.soic.spidal.common.RangePartitionerFactory179D; import edu.indiana.soic.spidal.common.RangePartitionerFactory180D; import edu.indiana.soic.spidal.common.RangePartitionerFactory181D; import edu.indiana.soic.spidal.common.RangePartitionerFactory182D; import edu.indiana.soic.spidal.common.RangePartitionerFactory183D; import edu.indiana.soic.spidal.common.RangePartitionerFactory184D; import edu.indiana.soic.spidal.common.RangePartitionerFactory185D; import edu.indiana.soic.spidal.common.RangePartitionerFactory186D; import edu.indiana.soic.spidal.common.RangePartitionerFactory187D; import edu.indiana.soic.spidal.common.RangePartitionerFactory188D; import edu.indiana.soic.spidal.common.RangePartitionerFactory189D; import edu.indiana.soic.spidal.common.RangePartitionerFactory190D; import edu.indiana.soic.spidal.common.RangePartitionerFactory191D; import edu.indiana.soic.spidal.common.RangePartitionerFactory192D; import edu.indiana.soic.spidal.common.RangePartitionerFactory193D; import edu.indiana.soic.spidal.common.RangePartitionerFactory194D; import edu.indiana.soic.spidal.common.RangePartitionerFactory195D; import edu.indiana.soic.spidal.common.RangePartitionerFactory196D; import edu.indiana.soic.spidal.common.RangePartitionerFactory197D; import edu.indiana.soic.spidal.common.RangePartitionerFactory198D; import edu.indiana.soic.spidal.common.RangePartitionerFactory199D; import edu.indiana.soic.spidal.common.RangePartitionerFactory200D; import edu.indiana.soic.spidal.common.RangePartitionerFactory201D; import edu.indiana.soic.spidal.common.RangePartitionerFactory202D; import edu.indiana.soic.spidal.common.RangePartitionerFactory203D; import edu.indiana.soic.spidal.common.RangePartitionerFactory204D; import edu.indiana.soic.spidal.common.RangePartitionerFactory205D; import edu.indiana.soic.spidal.common.RangePartitionerFactory206D; import edu.indiana.soic.spidal.common.RangePartitionerFactory207D; import edu.indiana.soic.spidal.common.RangePartitionerFactory208D; import edu.indiana.soic.spidal.common.RangePartitionerFactory209D; import edu.indiana.soic.spidal.common.RangePartitionerFactory210D; import edu.indiana.soic.spidal.common.RangePartitionerFactory211D; import edu.indiana.soic.spidal.common.RangePartitionerFactory212D; import edu.indiana.soic.spidal.common.RangePartitionerFactory213D; import edu.indiana.soic.spidal.common.RangePartitionerFactory214D; import edu.indiana.soic.spidal.common.RangePartitionerFactory215D; import edu.indiana.soic.spidal.common.RangePartitionerFactory216D; import edu.indiana.soic.spidal.common.RangePartitionerFactory217D; import edu.indiana.soic.sp
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值