• 很好的一道题,即使是我这种菜鸡也感到心潮澎湃。

  • 直觉有余,证明不足。思路有余,推导不足。

  • 无论是什么比赛,对拍都是最有效的查错方式。

  • 本篇题解里的所有图片采用 graph_editor 制作。


题意简述

给你一张没有边的,\(n\) 个点的图,点的编号从 \(0\) 到 \(n-1\),再给你一个参数 \(k\)。你可以执行以下操作任意次:

  • 选择点 \(u\) 和点 \(v\),将其连边,并且将 \((u+k) \mod n\) 与 \((v+k) \mod n\) 连边。

你需要在第一行输出你的操作次数 \(m\),在第 \(2\) 到 \(m+1\) 行输出你每次操作选择的 \(u\) 和 \(v\),使得经过你的操作,这张图变为无重边,无自环的一棵树。

思路整理

在以下的推导中,我们设 \(to_i=(i+k) \mod n\),\(p=gcd(n,k)\)。

你发现,如果 \(n\) 为偶数,必然无解。因为每次加入两条边,不可能产生奇数条边。

对于奇数,你想到了这样一种形式:将 \(0\) 和 \(to_0\) 连边,这时 \(to_0\) 会与 \(to_{to_0}\) 连边。之后将每个点 \(u\) 与 \(0\) 连边,此时 \(to_u\) 会与 \(to_0\) 连边。每次新加两个点,一开始有三个点。这样加下去总能满足条件。这看上去很对,你很高兴,认为今天能上大分。

显然电脑很不高兴,她给你这样一组数据:\(n=15,k=6\)。

你把图画出来,发现有一丝不对劲:

少了两个点!\(13\) 本来要和 \(7\) 对 \(0\) 和 \(1\) 连边,但 \(7\) 被 \(5\) 抢了!

你转念一想:我直接让 \(5\) 跟 \(7\) 连边,那么 \(13\) 就会与 \(7\) 连边。问题似乎被解决了!

然后你造出来了 \(p\) 条链。

你很不高兴,决定将这 \(p\) 条链连起来。

你试着将 \(0\) 和 \(1\) 连起来,发现 \(to_0\) 和 \(to_1\) 也连了起来。这就是个环了,于是你决定将 \(1\) 所在的那条链全断开。

这种方案有两个问题:

  1. 最后一行没人管
  2. 最后一列没人管

你试图将两个没人管的东西连起来: \(10\) 和 \(11\),然后会连上 \(1\) 和 \(2\)。。。成了!

如果有更多列呢?那就多做几遍!

这里提供一份 \(n=35,k=7\) 的答案图。

作为一个精益求精的人,你想要证明当 \(n\) 为奇数时都能构造出上面的树。

你发现,构造出这个树的条件为每条链的节点数为奇数,且有奇数条链。

显然,当 \(n\) 为奇数时 \(p\) 为奇数。第一条链的节点集合 \(S\) 为 \(0,p,2p,...,(n/p-1)*p\)。总共 \(n/p\) 个点。奇数被奇数整除得奇数

所以,第 \(i\) 条链可以表示为 \(0+(i-1),p+(i-1),...(n/p-1)+(i-1)\)。起点从 \(0\) 到 \(p-1\) 都有可能,所以总共有 \(p\) 条链。为奇数。

你很高兴,上了大分。因为这一场有许多人都被小学追及问题难住了。

代码很短,不给代码。

[ARC152D] Halftree题解的更多相关文章

  1. ARC145~152 题解

    比赛标号从大到小排列 . 因为博主比较菜所以没有题解的题都是博主不会做的 /youl ARC144 以前的比赛懒得写了 . 目录 AtCoder Regular Contest 152 B. Pass ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  10. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. Windows MFC HTTP POST请求 函数流程

    Windows MFC HTTP POST请求 函数流程 1 CString m_strHttpUrl(_T("http://10.200.80.86:8090/course/upload& ...

  2. [377] Prelude Opcodez

    [377] Prelude Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 RequestEnterWorld 04 ...

  3. java8中CompletableFuture异步处理超时

    java8中CompletableFuture异步处理超时的方法 Java 8 的 CompletableFuture 并没有 timeout 机制,虽然可以在 get 的时候指定 timeout,但 ...

  4. 开发Unity3D空战类插件 战机HUD系统

    Fighter HUD System 当您使用Unity3D来开发飞行模拟或者空战类游戏时,这款Fighter HUD Sytem插件将会非常的适合用来充当您战机的HUD系统. 特点 此HUD系统的安 ...

  5. sequelize 分页查询

    分页原理: 第一步 下面的result 可以修改:

  6. Mixly智能门禁(物联网)

    智能门禁arduino rc522读卡器  sg90舵机 校园卡我的校园卡号识别为 30fcb4a8d #include <RFID.h>#include <SPI.h>#in ...

  7. ESXI不重启增加硬盘空间更新

    ESXI虚拟机Linux添加新磁盘后,可以通过重新扫描SCSI总线,在不重启虚拟机的情况下添加SCSI设备在线扩容磁盘(不停机)后,添加磁盘无法识别的问题,尝试了多种办法,最终通过重新扫描SCSI设备 ...

  8. c++学习2 基础关键词

    三 volatile强制访问内存 在一个变量的频繁使用中,系统为了提高效率,会自动将内存里面的数据放入CPU里的寄存器里.但在某些特殊场景下,放入寄存器这个操作反倒会导致CPU无法及时获取最新的一手数 ...

  9. test image size

    676KB - jpg 2.5M jpg 3.8M-jpg 4M

  10. 关闭Google自动更新

    一.禁用任务计划 二.禁用更新服务 三.重命名更新程序 首先找到谷歌浏览器的安装位置