首页 > 其他分享 >24/05/08 图论

24/05/08 图论

时间:2024-05-08 14:22:41浏览次数:21  
标签:24 一层 05 int res 08 节点 ++ sum

\(\color{purple}(1)\) CF746G New Roads

  • 构造一棵 \(n\) 个点的深度为 \(t\) 的树,以 \(1\) 为根,使其中深度为 \(i\) 的点有 \(a_i\) 个且叶节点有 \(k\) 个。或报告无解。
  • \(t, k \le n \le 2 \times 10^5\)。

为了方便,我们令根节点的深度为 \(1\)。所有读入都向后顺延一位。

首先计算这棵树最多和最少有几个叶子节点,那么如果 \(k\) 不在这个范围内则无解。那么模拟样例二:

第一个观察是无论如何构造,最后一层的节点一定是叶子节点,且第一层一定不是叶节点。

可以发现叶子最多的情况,是每一层的节点都连向上一层的同一个节点,即 \(k_{\max} = a_t + \sum_{i=1}^{t-1}\max(a_i - a_{i + 1}, 0)\)。叶子最少的情况,是每一层的节点都尽可能f多的连向上一层的不同的点,直到不能连为止,即 \(k_{\min} = a_t + \sum_{i=1}^{t-1} (a_i - 1)\)。

除第一层外和最后一层外,每一层的叶子节点数一定不会少于 \(a_i - a_{i + 1}\)(如左图)且不会超过 \(a_i - 1\)(如右图)。那么我们可以处理出 \(b_2, b_3, \dots, b_{t - 1}\) 表示我们将要在第 \(i\) 层构造出 \(b_i\) 个叶子节点。需要保证 \(\max(0, a_i - a_{i + 1}) \le b_i \le a_i - 1\) 且 \(\sum_{i=2}^{t-1} b_i = k - a_t\)。这是极易做到的。

然后考虑根据 \(b\) 数组构造整棵树。显然我们需要满足第 \(i\) 层中有 \(a_i - b_i\) 个点不是叶子节点,即连接至少一个下一层的点。那么直接模拟构造即可。

$\color{blue}\text{Code}$
int n, k, t, a[N], sum[N];

int Id(int a, int b) {		// 第 a 层的第 b 个点
	return sum[a - 1] + b;
}

int mn() {
	int res = a[t];
	for (int i = 1; i < t; ++ i )
		if (a[i] > a[i + 1]) res += a[i] - a[i + 1];
	return res;
}

int mx() {
	int res = a[t];
	for (int i = 1; i < t; ++ i )
		res += a[i] - 1;
	return res;
}

int b[N];
vector<pair<int, int> > res;

void build_b() {
	int lst = k - a[t];
	for (int i = 2; i < t; ++ i ) {
		b[i] = max(0ll, a[i] - a[i + 1]);
		lst -= b[i];
	}
	
	for (int i = 2; i < t; ++ i ) {
		int tmp = min(lst, a[i] - 1 - b[i]);
		b[i] += tmp;
		lst -= tmp;
	}
}

void Luogu_UID_748509() {
	fin >> n >> t >> k;
	
	++ t;
	sum[1] = 1;
	a[1] = 1;
	for (int i = 2; i <= t; ++ i ) fin >> a[i], sum[i] = sum[i - 1] + a[i];
	
	if (k < mn() || k > mx()) puts("-1");
	else {
		build_b();
		for (int i = 1; i < t; ++ i ) {
			int x = a[i] - b[i];
			for (int j = 1; j <= x; ++ j )
				res.emplace_back(Id(i, j), Id(i + 1, j));
			for (int j = x + 1; j <= a[i + 1]; ++ j )
				res.emplace_back(Id(i, x), Id(i + 1, j));
		}
		fout << n << '\n';
		for (auto t : res) fout << t.first << ' ' << t.second << '\n';
	}
}

标签:24,一层,05,int,res,08,节点,++,sum
From: https://www.cnblogs.com/2huk/p/18179632

相关文章

  • 2024CVPR_Low-light Image Enhancement via CLIP-Fourier Guided Wavelet Diffusion(C
    一、Motivation1、单模态监督问题:大多数方法往往只考虑从图像层面监督增强过程,而忽略了图像的详细重建和多模态语义对特征空间的指导作用。这种单模态监督导致不确定区域的次优重建和较差的局部结构,导致视觉结果不理想的出现。------》扩散模型缺乏有效性约束,容易出现多种生成效......
  • 别搜了!2024年PMP备考攻略全指南看这里就够了!
    **一、考试时间PMP考试是一年四次的,一般在3月、6月、9月、12月份考试(考试时间一般为周六)。所以如果有想法一定要在这个几个时间点之间备考准备哦。**需要考试资料的朋友可以加我V.X:huangwanwei99或者QQ:869255552**二,报名流程一般都是中英文两个官网都报名1.英文报名需......
  • 2024年PMP考生|考前必练全真模拟题,附答案解析
    需要考试资料的朋友可以加我V.X:huangwanwei99或者QQ:8692555521、在⼀家已经完成多个类似项⽬的组织⾥,项⽬经理必须执⾏⼀个新项⽬的成本估算。如果项⽬经理利⽤这些之前的⼯作作为估算当前项⽬的基础,这属于下列哪⼀个估算法?()A.三点估算法B.⾃下⽽上估算C.参数估算D.......
  • 2024 年 5 月 7 日 周二 晴 常(324 字)
    正文早上两头跑应付工作时,客户部的同事说我像被吸干了阳气。没办法啊,觉没睡够不就应该这样吗……休息好了肯定不这样。另外,才知道这周六补班,那一瞬间有些想死(笑。文竹的末端叶子好像还是没有变绿呢。有些担心。或许应该有点耐心?鱼儿的手机似乎坏了,于是也买了......
  • 【2024-05-05】连岳摘抄
    23:59槐柳成阴雨洗尘,樱桃乳酪并尝新。古来江左多佳句,夏浅胜春最可人。                                                 ——《初夏》宋·陆游人想辞职时,一般就会更......
  • 【2024-05-04】连岳摘抄
    23:59我们的青年是一种正在不断成长、不断上升的力量,他们的使命是根据历史的逻辑来创造新的生活方式和生活条件。                                                 ——......
  • 【译】2024 年的机器遗忘/反学习
    来源:ai.stanford.edu/~kzliu/blog/unlearning由KenLiu∙May2024撰写▸目录1.反学习的历史和动机2.反学习的形式2.1.精确反学习2.2.通过差分隐私进行“反学习”2.3.已知示例空间下的经验性反学习2.4.未知示例空间下的经验性反学习2.5.只需要......
  • 末路狂花钱迅雷BT完整下载[1.12GB/2.35GB/Mp4]4K高清[1080P已更新]
    《末路狂花钱》是一部由导演马丁·斯科塞斯执导,1987年上映的经典电影。该片以真实的故事为基础,讲述了华尔街投资银行的故事,深入揭示了贪婪、欲望和腐败在当时华尔街的蔓延。本文将从电影的拍摄背景、故事情节以及对当时时代的反映与现实意义等方面进行分析。 首先,......
  • 2024-05-07 js定义类的方法
    一:传统写法//定义:functionhandleDate(date){this.idate=newDate(date).getTime();console.log(this.idate);this.resolveDate=function(){console.log('resolveDate',this.idate);}}//使用:constgetDate=newhandleDate('2020-02-0220:20:......
  • CVPR 2024 | 字节提出视觉基础模型:ViTamin,实现多项SOTA!
    前言 视觉语言模型屡屡出现新突破,但ViT仍是图像编码器的首选网络结构。字节提出新基础模型——ViTamin,专为视觉语言时代设计。本文转载自量子位(QbitAI)仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘......