CF2150F Cycle Closing

news/2025/10/8 22:00:49/文章来源:https://www.cnblogs.com/cjoierzdc/p/19130184

感觉上判是否能一次完成是困难的。设两次的路径长度分别为 \(a, b\),考虑一些特殊情况。

题目一定有解,考虑取出一棵生成树。可以发现,第二次操作时的边数实际上很多,感觉上对于 \(b\) 不能限制得太小。考虑 \(a\) 较小的情况。

事实上我们想解决的是如下问题:选定一个 \(b\),对于任意的 \((s,t)\),要么 \(\operatorname{dist}(s,t)=1\)\(a\),要么从 \(s\),每次走 \(1\)\(a\) 的距离,能够恰好 \(b\) 步到达 \(t\)

对于 \(a=3\),可以发现每步一定会改变深度奇偶性,因此步数的奇偶性确定了,不太能做。而如果 \(a\ge 4\),路径形态比较复杂。因此考虑 \(a=2\) 的情形。

首先 \(b\) 有一个下界为 \(\lceil\frac{D+1}{2}\rceil\),其中 \(D\) 为直径长度。事实上我们也能构造出 \(b=D\) 的方案。

考虑一条链 \(s\to t\),其长度为 \(d\)

如果 \(d\ge D\),那么我们在这条链上不停跳 \(=2\) 的距离,然后一段后缀一步步走即可。

如果 \(d<D\),此时我们找出距离 \(s\) 最远点 \(x\),设 \(x\)\(s\to t\) 的最近点为 \(p\),那么 \(s\to t\) 上的边还是一步步走,然后再在 \(p\to x\) 这条链上通过 \(1\to 3\to\cdots 2k+1\to 2k\to \cdots\to 2\) 状物消耗剩余步数即可。

#include <bits/stdc++.h>
using namespace std;const int kN = 205;
int n, m;
bool vis[kN];
bool e[kN][kN];
vector<int> tr[kN];
vector<int> path[kN][kN];void DFS(int x) {vis[x] = 1;for(int to = 1; to <= n; to++) {if(vis[to] || !e[x][to]) continue;tr[x].push_back(to);tr[to].push_back(x); DFS(to);}
}void DFS2(int x, int fa, vector<int> v, int rt) {v.push_back(x);path[rt][x] = v;for(int to : tr[x]) {if(to != fa) DFS2(to, x, v, rt);}
}void Clear() {memset(vis, 0, sizeof(vis));memset(e, 0, sizeof(e));fill_n(tr, n + 3, vector<int> {});for(int i = 1; i <= n; i++) {fill_n(path[i], n + 3, vector<int> {});}
}void Solve() {cin >> n >> m;Clear();for(int i = 1; i <= m; i++) {int u, v;cin >> u >> v;e[u][v] = e[v][u] = 1;}DFS(1);for(int i = 1; i <= n; i++) {DFS2(i, 0, vector<int> {}, i);}int x = 0, y = 0, dia = -1;for(int i = 1; i <= n; i++) {for(int j = i + 1; j <= n; j++) {int len = path[i][j].size() - 1;if(dia < len) dia = len, x = i, y = j;}}cout << "2\n";{vector<tuple<int, int, int>> edge;for(int i = 1; i <= n; i++) {for(int j = i + 1; j <= n; j++) {if(e[i][j]) continue;for(int k = 1; k <= n; k++) {if(e[k][i] && e[k][j]) {edge.emplace_back(i, k, j);break;}}}}cout << "3\n";cout << edge.size() << "\n";for(auto k : edge) {int x, y, z;tie(x, y, z) = k;cout << x << " " << y << " " << z << "\n";e[x][z] = e[z][x] = 1;}}int len = (dia + 1) / 2;vector<vector<int>> ans;for(int i = 1; i <= n; i++) {for(int j = i + 1; j <= n; j++) {if(e[i][j]) continue;int dis = path[i][j].size() - 1;vector<int> p;if(dis >= len) {for(int k = 0; k <= dis; k += 2) {p.push_back(path[i][j][k]);if(p.size() + (dis - k) == len + 1) {while(k < dis) p.push_back(path[i][j][++k]);break;}}ans.push_back(p);continue;}if(path[i][x].size() < path[i][y].size()) swap(x, y);int nd = len - dis, t = 0;while((t + 1 < path[i][j].size()) && (path[i][j][t + 1] == path[i][x][t + 1])) t++;if(path[i][x][1] != path[i][j][1]) {p.push_back(i);vector<int> v = path[i][x];for(int k = 2; k <= nd; k += 2) {p.push_back(v[k]);}for(int k = nd - !(nd & 1); k >= 1; k -= 2) {p.push_back(v[k]);}for(int k = 1; k < path[i][j].size(); k++) {p.push_back(path[i][j][k]);}}else {for(int k = 0; k < t; k++) {p.push_back(path[i][j][k]);}vector<int> v;for(int k = t; k < path[i][x].size(); k++) {v.push_back(path[i][x][k]);}for(int k = 1; k <= nd; k += 2) {p.push_back(v[k]);}for(int k = nd - (nd & 1); k >= 1; k -= 2) {p.push_back(v[k]);}for(int k = t; k < path[i][j].size(); k++) {p.push_back(path[i][j][k]);}}ans.push_back(p);}}cout << len + 1 << "\n";cout << ans.size() << "\n";for(vector<int> v : ans) {for(int i : v) cout << i << " ";cout << "\n";}
}int main() {
//  freopen("1.in", "r", stdin);
//  freopen("1.out", "w", stdout);ios::sync_with_stdio(0), cin.tie(0);int t;cin >> t;while(t--) Solve();return 0;
}

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

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

相关文章

Easysearch 字段隐身之谜:source_reuse 与 ignore_above 的陷阱解析

背景问题 前阵子,社区有小伙伴在使用 Easysearch 的数据压缩功能时发现,在开启 source_reuse 和 ZSTD 后,一个字段的内容看不到了。 索引的设置如下: {......"settings": {"index": {"co…

QOJ856 Cactus 广义串并联图

题意 给定一棵仙人掌, 你需要用 \(k\) 种颜色给每个结点染色, 且保证有边相连的结点的颜色不相同, 求染色的方案数对 \(10^9+7\) 取模的结果。仙人掌定义为一张特殊的无向图, 其中每条边至多在一个简单环上。 题解 因为…

CF2152 订题

context A 除了最小的数字每种数字都会占用一次,去重后直接输出 \(2n-1\) 即可。 B 太神秘了,先咕咕咕。 C 发现如果一个区间内存在至少一个长度 \(\ge 2\) 的同色连续段,那么这个连续段可以通过删除两个同色之间的…

TortoiseSVN账号切换 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

房产中介 网站开发天津招投标天津建设工程信息网

电脑 远程桌面连接你的凭据不工作解决方法 方法/步骤 第一步我们首先需要知道远程桌面连接你的凭据不工作原因是&#xff0c;远程的电脑拒绝了访问&#xff0c;需要设置在远程的电脑上设置安全选项&#xff0c;按winR键&#xff0c;打开运行&#xff0c;输入“gpedit.msc”&a…

GJ Round 2025赛季

Round 1 (9.1) A给定正整数序列 \(a_1,a_2,\cdots,a_n\),对于 \(\forall k \in [0,n] \cap \mathbb Z\),完成以下问题: 令 \(S \subseteq A = \{1,2,\cdots,n\}\),当且仅当存在一个集合 \(T \subseteq S\),满足 \…

resolvers: [ElementPlusResolver()] 有什么用? - 详解

resolvers: [ElementPlusResolver()] 有什么用? - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

ASP.NET Core 中读取 UserAgent 的正确姿势

今天读了 Andrew Lock 的2篇博文学到的招式,记录一下。 两篇博文的链接:Using default interface methods for performance gains in IHeaderDictionary A brief look at StringValues之前的读取 UserAgent 的代码:…

Git学习记录(二):代码patch

Git中的一笔commit提交,可以成为patch生成Patch带有commit信息: git format-patch -1 HEAD only代码应用Patchcheck是否有冲突 git apply --check 0001-xxx.patch 应用Patchgit apply 0001-xxxx.patch git am 0001-xx…

网站开发有关费用网站建设服务费一年多少钱

Ubuntu从起后居然把Windows的设置给记住了。显示ok。我晕。以前倒是也有过这问题&#xff0c;在双系统情况下&#xff0c;外接键盘的灯会继承Windows的早就有心弄个显示器&#xff0c;把笔记本的外接上&#xff0c;倒不是说非要2个屏幕来工作如何如何&#xff1f;只是因为我的本…

2025年10月化妆品代工厂最新推荐排行榜:聚焦 OEM/ODM/ 网红爆款需求,精选优质企业助品牌高效合作

2025 年化妆品 ODM 行业规模预计突破 1128 亿元,功效型护肤等细分领域增速迅猛,但行业内企业资质悬殊问题突出。部分代工企业缺乏核心研发能力,配方同质化严重难以适配 “成分党” 需求;部分生产标准落后,未达十万…

西安地产网站制作公司四川网站建设公司 登录

## 路由与伪静态### 路由>[info] 字面上解释&#xff0c;路是线路&#xff0c;道路&#xff1b;由&#xff0c;缘由&#xff0c;指意&#xff0c;表示规则&#xff1b;所以意思就是按照什么规则&#xff0c;或者意义&#xff0c;被指派到什么地方去。所以路由是指线路分发&a…

Exchange安全漏洞分析:ProxyOracle攻击链详解

本文深入分析Microsoft Exchange中的ProxyOracle攻击链,包含CVE-2021-31195 XSS漏洞和CVE-2021-31196填充Oracle攻击,攻击者可通过恶意链接获取用户明文密码,涉及FBA认证机制和加密cookie解析过程。Orange:MS Exch…

北京建站公司哪家好都选万维科技电脑维护网站模板

题目链接 2865. 美丽塔 I - 力扣&#xff08;LeetCode&#xff09; 解题思路 根据题意可以知道&#xff0c;假设数组的长度为n,对于山状数组heights定义如下&#xff1a; 假设heights[i]为数组中的最大值&#xff0c;则i左边的值均小于等于heights[i]&#xff0c;i右边的值…

将word档案转为kindle可识别的azw3材料的方法

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

牛客 周赛111 20251008

牛客 周赛111 20251009 https://ac.nowcoder.com/acm/contest/117763 A: 题目大意: void solve(){int a, b, c;cin >> a >> b >> c;if (b != a + 1 || c != b + 1) cout << "No";…

本人于2025上半学期编码需要遵守的规范(参考腾讯内部编码规范)

编码的规范可以使代码更加具有易维护性以及编码安全性等等 程序的板式 缩进使用 4 个空格,禁止混用 Tab 键。 行宽限制 80 字符,长表达式在低优先级操作符处换行,操作符置于新行首。 大括号{}独占一行并与代码对齐,…

常州语言网站建设龙岩网站开发

hw_breakpoint 是由处理器提供专门断点寄存器来保存一个地址&#xff0c;是需要处理器支持的。处理器在执行过程中会不断去匹配&#xff0c;当匹配上后则会产生中断。 内核自带了硬件断点的样例linux-3.16\samples\hw_breakpoint\data_breakpoint.c static void sample_hbp_h…

tp做的网站封装成app定制网站建设公司有哪些

抖音短视频规则一、抖音的定义1、抖音是个去中心化的平台&#xff0c;根本没有什么权重&#xff0c;主要是看你账号的活跃度&#xff0c;互动关系&#xff0c;和行为习惯标签&#xff0c;抖音后台技术有去重机制&#xff0c;机器会自动判断你的视频重复率。重复率达到一定的比例…

图片素材网站免费大推荐网站正在备案

我想在recyclerview中显示一些JSON对象&#xff0c;并且希望它们在日期之后排序&#xff0c;我该如何实现&#xff1f;下面是下载从JSON URL的数据的方法&#xff1a;Android Studio Studio回收列表中的JSON对象public void downloadFromSkistar(){try{URL url new URL("…