构造+割点,F2. Spanning Tree with One Fixed Degree

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

Problem - 1133F2 - Codeforces


二、解题报告

1、思路分析

考虑以根节点为割点,会有若干个连通块

连通块的数目为根节点至少要连出去的边,不妨记为mi

如果mi > D,那么无解

如果根节点的度 < D,那么无解

否则先把一定要连出去的边连了,然后再连D - mi条边

然后处理结果即可

2、复杂度

时间复杂度: O(N+M)空间复杂度:O(N+M)

3、代码详解

#include <bits/stdc++.h>
using PII = std::pair<int, int>;
using i64 = long long;const int inf = 1e9;void solve() {int N, M, D;std::cin >> N >> M >> D;std::vector<std::vector<int>> g(N);std::vector<int> p(N, -1);auto find = [&](auto&& self, int x) -> int {return p[x] < 0 ? x : p[x] = self(self, p[x]);};auto merge = [&](int x, int y) -> void {int px = find(find, x), py = find(find, y);if (px == py) return;if (p[px] > p[py]) std::swap(px, py);p[px] += p[py], p[py] = px;};for (int i = 0, u, v; i < M; i ++ ) {std::cin >> u >> v, -- v, -- u;g[u].push_back(v), g[v].push_back(u);}std::vector<bool> vis(N);vis[0] = true;auto dfs1 = [&](auto&& self, int u, int fa) -> void{vis[u] = true;for (int v : g[u]) {if (v == fa || vis[v])  continue;merge(u, v);self(self, v, u);}};std::unordered_set<int> st;for (int v : g[0])if (!vis[v])dfs1(dfs1, v, 0), st.insert(find(find, v));if (st.size() > D || g[0].size() < D) {std::cout << "NO";return;}std::vector<std::array<int, 2>> ans; ans.reserve(N - 1);vis.assign(N, false), vis[0] = true;auto dfs2 = [&](auto&& self, int u, int fa) -> void {vis[u] = true;for (int v : g[u])if (!vis[v] && v != fa)ans.push_back( { u + 1, v + 1 } ), self(self, v, fa);};for (int v : g[0]) if (st.count(find(find, v))) vis[v] = true, ans.push_back( { 1, v + 1 } ), D --, st.erase(find(find, v));for (int v : g[0])if (!vis[v] && D)vis[v] = true, ans.push_back( { 1, v + 1 } ), D --;for (int v : g[0]) if (vis[v]) dfs2(dfs2, v, 0);if (ans.size() + 1 == N) {std::cout << "YES\n";for (auto& [x, y] : ans)std::cout << x << ' ' << y << '\n';}else std::cout << "NO\n";
}int main () {std::ios::sync_with_stdio(false);   std::cin.tie(0);  std::cout.tie(0);int _ = 1;// std::cin >> _;while (_ --)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/22355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql终端使用中的错误

在这个过程中&#xff0c;出现了几个问题&#xff1a; 在退出 MySQL 后&#xff0c;你尝试再次使用 mysql 命令登录&#xff0c;但系统提示找不到该命令。这可能是因为 MySQL 的执行文件路径没有加入到系统的环境变量中。你可以尝试使用绝对路径来运行 mysql 命令&#xff0c;或…

mac环境基于llama3和metaGPT自动开发2048游戏

1.准备虚拟环境 conda create -n metagpt python3.9 && conda activate metagpt 2.安装metagpt pip install --upgrade metagpt 3.初始化配置文件 metagpt --init-config 4. 安装llama3 5. 修改配置文件 6.让metegpt自动开发2048游戏 7.经过多轮迭代&#xff0c;最终…

Prisma是什么:现代数据库工具和ORM

Prisma是什么&#xff1a;现代数据库工具和ORM 引言 Prisma 是一个流行的开源数据库工具和对象关系映射&#xff08;ORM&#xff09;系统&#xff0c;用于帮助开发者以类型安全的方式与数据库进行交互。它提供了一套丰富的功能&#xff0c;包括数据库建模、迁移管理、数据访问…

个人网站建设方案书

个人网站建设方案书 一、项目背景 随着互联网的迅猛发展&#xff0c;个人网站已经成为展示个人能力、情感表达的重要平台。无论是个人品牌推广&#xff0c;还是个人作品展示&#xff0c;个人网站都能够为个人提供一个独特的展示空间。因此&#xff0c;建设一个个人网站已经成为…

Kotlin 运算符重载

文章目录 运算符函数运算符函数重载 运算符函数 我们平时使用的、-、、[]等运算符其实是以函数&#xff08;成员函数或扩展函数&#xff09;的形式实现的。对应的符号有对应的函数名&#xff0c;并且需要以operator标记。 operator fun 函数名()[: 返回值类型] [函数体]运算符…

JavaScript 中的 NaN

定义 NaN是一个特殊的数字值&#xff08;typeof NaN的结果为number&#xff09;&#xff0c;是not a number的缩写&#xff0c;表示不是一个合法的数字。 注意点 NaN最大的怪癖是唯一一个和自身不相等的值 NaN NaN // false 如何辨别NaN isNaN() 是一个全局方法&#x…

四个初始化 JavaScript Array数组方法及性能对比

Hi&#xff0c;这里是松桑&#xff0c;每天学习一个 JS 片段&#xff0c;涨涨&#x1f9c0;&#xff01;今天带来的是四个初始化 JavaScript Array数组方法。 在 JavaScript 中初始化数组是常见的场景&#xff0c;初始化有多种方法&#xff0c;创建性能也有差异。虽然可能没有一…

深度神经网络——什么是 CNN(卷积神经网络)?

Facebook和Instagram自动检测图像中的面孔&#xff0c;Google通过上传照片搜索相似图片的功能&#xff0c;这些都是计算机视觉技术的实例&#xff0c;它们背后的核心技术是卷积神经网络&#xff08;CNN&#xff09;。那么&#xff0c;CNN究竟是什么呢&#xff1f;接下来&#x…

HTB 靶场 Mailing 未完待续

访问网页 在/etc/hosts 添加ip和域名 hosts 文件包含ip地址与主机名之间的映射&#xff0c;还包括主机的别名。 Linux系统所有程序查询/etc/hosts文件解析对主机名或者域名的IP地址。没有找到就需要使用DNS服务器解释域名。 DNS原理 1 输入域名&#xff0c;在本地缓存服务…

新手教程之使用LLaMa-Factory微调LLaMa3

文章目录 为什么要用LLaMa-Factory什么是LLaMa-FactoryLLaMa-Factory环境搭建微调LLaMA3参考博文 为什么要用LLaMa-Factory 如果你尝试过微调大模型&#xff0c;你就会知道&#xff0c;大模型的环境配置是非常繁琐的&#xff0c;需要安装大量的第三方库和依赖&#xff0c;甚至…

Kotlin协程中的作用域 `GlobalScope`、`lifecycleScope` 和 `viewModelScope`

Kotlin协程中的作用域 Kotlin协程提供了多种作用域来管理协程的生命周期&#xff0c;其中最常见的是 GlobalScope、lifecycleScope 和 viewModelScope。 1. GlobalScope GlobalScope 是一个全局作用域&#xff0c;不受任何其他生命周期的限制。这意味着在 GlobalScope 中启动…

【数据结构与算法 经典例题】链表的回文结构(图文详解)

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法 经典例题》C语言 期待您的关注 ​ 目录 一、问题描述 二、解题思路 三、C语言代码实现 一、问题描述 二、解…

Flutter 中的 Table 小部件:全面指南

Flutter 中的 Table 小部件&#xff1a;全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架&#xff0c;它允许开发者使用 Dart 语言构建高性能、美观的应用。在 Flutter 的丰富组件库中&#xff0c;Table 是一个用于创建表格布局的组件。本文将为您提供一个全面的指南&a…

zdppy_api如何实现带参数的中间件

参考代码 import timefrom api.middleware import Middleware from api.middleware.base import BaseHTTPMiddleware from api.exceptions import AuthException import jwthas_logger False try:from log import loggerhas_logger True except:passdef roleapi(has_auth_fu…

深度学习-07-反向传播的自动化

深度学习-07-反向传播的自动化 本文是《深度学习入门2-自製框架》 的学习笔记&#xff0c;记录自己学习心得&#xff0c;以及对重点知识的理解。如果内容对你有帮助&#xff0c;请支持正版&#xff0c;去购买正版书籍&#xff0c;支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

OJ题目【栈和队列】

题目导入 栈&#xff1a; 题目一&#xff1a;有效的括号题目二&#xff1a;用栈实现队列 队列 题目&#xff1a;实现循环队列 栈 题目一 有效的括号 题目要求 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘…

LeetCode746使用最小花费爬楼梯

题目描述 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。 解析 动态…

负载均衡加权轮询算法

随机数加权轮询算法 public int select() {int[] weights {10, 20, 50};int totalWeight weights[0] weights[1] weights[2];// 取随机数int offset ThreadLocalRandom.current().nextInt(totalWeight);for (int i 0; i < weights.length; i) {offset - weights[i];i…

七校联赛题铅笔姿态及笔迹检测装置--mpu6050识别数字

前言 前几天打完比赛&#xff0c;收获还是挺大的&#xff0c;数字识别部分基本上浪费了绝大部分时间。先将思路简单说明。 1、题目 2、思路 针对笔迹检测&#xff0c;我们首先考虑的肯定是陀螺仪来测量加速度方向来判断书写的方向&#xff0c;从而得到书写的数字。 我们的方案…

LLM的基础模型3:Transformer变种

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…