首页 > 其他分享 >P7903 兜心の顶(构造)

P7903 兜心の顶(构造)

时间:2024-05-12 12:08:38浏览次数:29  
标签:输出 ch 重心 P7903 样例 构造 兜心 直径 节点

P7903 兜心の顶

题目背景

Source:八仙敬酒

  • 吕洞宾——醉酒提壶力千钧;
  • 铁拐李——旋肘膝撞醉还真;
  • 汉钟离——跌步抱坛兜心顶
  • 蓝采和——单提敬酒拦腰破;
  • 张果老——醉酒抛杯踢连环;
  • 曹国舅——仙人敬酒锁喉扣;
  • 韩湘子——擒腕击胸醉吹箫;
  • 何仙姑——弹腰献酒醉荡步。

题目描述

给定正整数 \(n\),要求构造一棵 \(n\) 个结点的树,满足树的直径的重心 不是 树的重心。

同时这棵树需满足:直径\(^1\)、重心\(^2\)、直径的重心\(^3\)全部唯一。


注:

输入格式

第一行输入一个正整数 \(n\),表示树的结点个数。

输出格式

第一行输出一个正整数 \(n\)。

接下来 \(n-1\) 行,每行输出两个正整数 \(u,v\),表示树的一条边。

无解输出 -1

本题采取 Special Judge,输出任意一组合法解均给分。

样例 #1

样例输入 #1

20

样例输出 #1

20
20 18
1 3
19 12
19 4
16 1
4 1
1 7
16 10
7 20
13 8
10 2
18 13
13 17
14 18
11 19
16 5
2 6
16 9
17 15

样例 #2

样例输入 #2

2

样例输出 #2

-1

提示

样例说明

样例 #1 中直径的重心是 \(7\),树的重心是 \(1\),\(1\ne7\)。

样例 #2 中 \(n=2\),只有两个点时显然重心不可能唯一。

数据范围

本题采取捆绑测试。

子任务编号 分值 特殊性质
\(1\) \(30\) \(n\le10\)
\(2\) \(30\) \(n\) 是奇数
\(3\) \(30\) \(n\) 是偶数
\(4\) \(10\)

对于 \(100\%\) 的数据:\(1\le n\le10^4\)。

题目大意

构造一棵\(n\)个节点的树,使得树的直径、树的重心、树的直径的重心唯一,并且树的重心与树的直径的重心不同。

分析

我们先构造一个长链作为树的直径,

由于树的直径的重心唯一,

显然  直径应为奇数。


分情况讨论

  1. 显然  直径长度为\(1\)时不满足题意。

  2. 当直径长度为\(3\)时:

    此时,树的直径的重心为\(点2\)。

    若要 “满足树的直径的重心不是树的重心” ,那么树的重心可供选取的位置为\(点1\)或\(点3\)。 当然,这两个位置是等价的

    假如我们选\(点1\):

    那么为了让 \(点1\) 成为重心,我们至少要给 \(点1\) 一个节点……吗?

    细看可发现:此时树的重心有\(点1\),\(点2\)两个重心,

    所以我们至少要给\(点1\) 两个节点。

    当然,此时树的直径变为了\(4\),不满足题意。

  3. 当直径长度为\(5\)时:

    此时,树的直径的重心为\(点3\)。

    那么现在树的重心可供选取的位置为\(点1\)(\(\Leftrightarrow 点5\))或\(点2\)(\(\Leftrightarrow 点4\))。
    当我们选\(点1\)时,与直径长度为\(3\)时同理。

    当我们选\(点2\)时,我们可以在此节点上增加至少两个节点(同上)使他成为树的重心。

    乂~ 多了两个直径 咋办呢?

    在\(点1\)上再加一个点不就完事了嘛~

    乂~ 直径成偶数了 咋办呢?

    为了不让树的直径的重心树的重心重合,我们只能在\(点5\)再加一个节点。

最终我们得到了一个完整的大保健 一颗兜心の顶树,ta的直径为\(7\),重心为\(点2\),直径的重心为\(点3\)。

综上,\(n \leq 8\)时 无解。

乂~ 那如果点数比\(8\)多 咋办呢?

其实有些熟悉毒瘤题的dalao可能已经想到了,这实际上就是一个菊花图。

给\(点3\)疯狂加点不就完了嘛~

Elaina's code

Elaina's code
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define Elaina 0
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
    return x*f;
}

int n;

main(){
	n=read();
	if(n<=8) return printf("-1"),Elaina;
	printf("%lld\n",n);
	printf("1 2\n");
	printf("2 3\n");
	printf("3 4\n");
	printf("4 5\n");
	printf("5 6\n");
	printf("6 7\n");
	for(int i=8;i<=n;++i){
		printf("3 %lld\n",i);
	}
	return Elaina;
}

标签:输出,ch,重心,P7903,样例,构造,兜心,直径,节点
From: https://www.cnblogs.com/Elaina-0/p/18186657

相关文章

  • tar文件header的格式和构造
    Header定义//standardarchiveformat-standardtar-ustarstructTarHeader{charname[100];//0-99charmode[8];//100-107charuid[8];//108-115chargid[8];//116-123charsize[12];//124-135charm......
  • 构造和运行模块
    构造和运行模块在尝试运行模块之前,需要使用合适的系统(通常是封闭的)实现内核原代码的相应实验Helloworld模块模块构造/析构:使用module_init/module_exit宏装饰相应函数,实现内核模块的装载/移除许可证:使用MODULE_LICENSE("")实现对许可证的装载;模块的装载与移除:装载insmo......
  • GPS标准时钟系统(考场子母钟系统)设计构造原理特点
    GPS标准时钟系统(考场子母钟系统)设计构造原理特点GPS标准时钟系统(考场子母钟系统)设计构造原理特点京准电子科技官微——ahjzsz【摘要】时钟系统是校园网络中一个重要的精准计时系统,随着网络的普及,许多校园都建了自己的校园专网,使用的网络设备和服务器也日益增多,这些设备都有自己......
  • TextClip构造方法报OSError:MoviePy creation of None failed because of the followi
    在使用moviepy的构造方法创建实例时报错:这可能是两个原因导致的:未安装ImageMagick应用ImageMagick是一套功能强大、稳定而且开源的多平台工具集和开发包,可以用来读、写和处理超过200种基本格式的图片文件,包括PNG,JPEG,GIF,HEIC,TIFF,DPX,EXR,WebP,Postscript,PDF和SVG等格式。利用ImageM......
  • 设计模式03----构造者模式
    构造者模式:是一种创建型设计模式,是将一个对象拆分成多个部件分别进行构造然后组合成为一个整体的设计模式产品(Product):被构建的复杂对象,通常包含多个组成部件,例如一个需要配置的汽车对象。抽象建造者(Builder):一个接口,定义了构建产品各个部件的方法。具体建造者(ConcreteBuilde......
  • dataframe的构造,取值,赋值,移动,交集,并集,排序,打印,转List,导出csv
    一、构造  da=pd.read_csv(filepath_or_buffer='data.csv',sep='\t')  print(da)  datas=pd.DataFrame(da)2、直接赋值df=pd.DataFrame([[1.4,np.nan],[7,-4],[np.nan,np.nan],[0.75,-1.3]],index=[1,2,3,4],         columns=[......
  • 构造照亮世界——快速沃尔什变换 (FWT)
    博客园我的博客快速沃尔什变换解决的卷积问题快速沃尔什变换(FWT)是解决这样一类卷积问题:\[c_i=\sum_{i=j\odotk}a_jb_k\]其中,\(\odot\)是位运算的一种。举个例子,给定数列\(a,b\),求:\[c_i=\sum_{j\oplusk=i}a_jb_k\]FWT的思想看到FWT的名字,我们可以联想到之前学过......
  • Scopus & SciVal 研究选题的逻辑化构造
    主讲人:付强,爱思唯尔科研管理部特聘讲师。主要内容为:1. 高效文献发现与分析功能。2. 案例分享:如何辅助选题 ——从大领域入手锚定具体问题和方向。3. 逻辑化构筑自己的课题网络。https://www.bilibili.com/video/BV1y3411p7nz/?vd_source=3ad05e655a5ea14063a9fd1c0dcdee3e......
  • 105. 106. 从中序与后序遍历序列构造二叉树
    https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/思路和106.从中序与后序遍历序列构造二叉树相同/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoder......
  • 106. 从中序与后序遍历序列构造二叉树(leetcode)
    https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/要点是明白中序和后序如何构造二叉树的,并且需要理清当前递归函数的语义,不要一开始就陷入细节,而是思考整棵树与其左右子树的关系,语义是:即构造当前节点,给当前节点左右子树赋值,明......