AT_abc398_e [ABC398E] Tree Game 题解

news2025/4/17 1:09:17

题目传送门

题目大意

题目描述

本题是一道交互题(你的程序需要通过输入输出与评测系统进行交互)。

给定一棵包含 N N N 个顶点的树 G G G,顶点编号为 1 1 1 N N N。第 i i i 条边连接顶点 U i U_i Ui V i V_i Vi

你和高桥君将使用这棵树 G G G 进行游戏。首先,你选择先手或后手。之后,双方轮流进行以下操作(先手先行动):

  • 选择一个满足 1 ≤ i < j ≤ N 1 \leq i < j \leq N 1i<jN 的整数对 ( i , j ) (i, j) (i,j),并满足以下两个条件:
    • G G G 中当前不存在连接顶点 i i i 和顶点 j j j 的边。
    • G G G 中添加连接顶点 i i i 和顶点 j j j 的边后,不会形成奇环。
  • 将该边添加到 G G G 中。

无法进行操作的一方判负,另一方获胜。请通过实际与高桥君对弈取得胜利。

奇环的定义:顶点序列 ( v 0 , v 1 , … , v k ) (v_0, v_1, \ldots, v_k) (v0,v1,,vk) 满足以下所有条件时,称为 G G G 的一个奇环:

  • k k k 为奇数。
  • v 0 = v k v_0 = v_k v0=vk
  • 对所有 1 ≤ i ≤ k 1 \leq i \leq k 1ik,存在连接 v i − 1 v_{i-1} vi1 v i v_i vi 的边。

交互方式

本题是一道交互题,你的程序需通过标准输入输出与评测系统交互。

首先,通过标准输入接收 N N N G G G 的信息,格式如下:

N N N
U 1 U_1 U1 V 1 V_1 V1
U 2 U_2 U2 V 2 V_2 V2
⋮ \vdots
U N − 1 U_{N-1} UN1 V N − 1 V_{N-1} VN1

接着,你需决定选择先手或后手。若选择先手,通过标准输出输出 First;若选择后手,输出 Second

此后游戏开始。

你的回合时,需将选择的整数对 ( i , j ) (i, j) (i,j) 按顺序以空格分隔输出至标准输出:

i i i j j j

高桥君的回合时,将通过标准输入给出两个整数 i i i j j j

i i i j j j

( i , j ) = ( − 1 , − 1 ) (i, j) = (-1, -1) (i,j)=(1,1) 时,表示你已获胜且游戏结束,此时需立即终止程序。
其他情况下, ( i , j ) (i, j) (i,j) 表示高桥君选择的整数对。

输入格式

见「交互方式」。

输出格式

见「交互方式」。

说明/提示

约束条件

  • 2 ≤ N ≤ 100 2 \leq N \leq 100 2N100
  • 1 ≤ U i < V i ≤ N 1 \leq U_i < V_i \leq N 1Ui<ViN
  • 给定的图是树。
  • 输入均为整数。

注意事项

  • 每次输出后,需在末尾添加换行符并刷新标准输出缓冲区。否则可能导致评测结果为   TLE 。 \footnotesize\color{red}\textsf{\textbf{每次输出后,需在末尾添加换行符并刷新标准输出缓冲区。否则可能导致评测结果为 \colorbox{#f0ad4e}{\color{white}{TLE}}。}} 每次输出后,需在末尾添加换行符并刷新标准输出缓冲区。否则可能导致评测结果为 TLE
  • 若在交互过程中输出格式错误或程序意外终止,评测结果将不确定。
  • 游戏结束后请立即终止程序,否则评测结果不确定。

交互示例

输入输出解释
4    1   2 2   3 3   4 \begin{matrix} \texttt{4 { }} \\ \texttt{1 2} \\ \texttt{2 3} \\ \texttt{3 4} \end{matrix}  1 22 33 4首先,你收到 N N N G G G 的边信息。
First \texttt{First} First你选择先手行动。
1   4 \texttt{1 4} 1 4你在顶点 1 1 1 4 4 4 之间添加一条边
-1   -1 \texttt{-1 -1} -1 -1高桥无法继续操作,你获胜。评测结果返回 AC \colorbox{#5cb85c}{\footnotesize\textsf{\textbf{\color{white}{AC}}}} AC

解题思路

题目要求我们没有奇环,所以我们将这棵树进行二分图染色(父节点与子节点的颜色不一样且只有两种颜色)。然后我们暴力查找所有没有连过边且颜色相异的 i , j i, j i,j,将 ( i , j ) (i, j) (i,j) 存下来。如果存下来的边数为奇数,那么选择先手,否则后手。

因为如果环为奇环那么首尾位颜色一定一样,比如 0 → 1 → 0 0 \to 1 \to 0 010,而偶环 0 → 1 → 0 → 1 0 \to 1 \to 0 \to 1 0101 首尾位置颜色不同,并且这个环一定是树上的一条路径再加上一条我们自己连的边,所以显然。

至于先手后手应该不难理解吧,例如有 3 3 3 条边,如果你后手,那么高桥选 1 1 1 条,你又选 1 1 1 条,最后高桥选 1 1 1 条,到你的时候发现不管怎么选都会构成奇环,所以只能先手,证明偶数后手同理。

接下来我们就只需要标记所有出现过的 ( i , j ) (i, j) (i,j),再找到没有标记过的 ( x , y ) (x, y) (x,y) 输出即可。

CODE:

//ChatGPT 添加的注释
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
vector<int> v[N];
vector<pair<int, int >> v2;
map<pair<int, int>, bool > m;
bool color[N];  // 用于标记每个节点的颜色(0 或 1)
inline void dfs(int x, int fa) {
	color[x] = color[fa] ^ 1;  // 当前节点的颜色与父节点颜色不同
	for (auto u : v[x]) {
		if (u ^ fa) {
			dfs(u, x);
		}
	}
}
int main() {
//	ios::sync_with_stdio(false);
//	ios_base::sync_with_stdio(false);
//	cin.tie(0), cout.tie(0);
	int n;
	cin >> n;
	for (int i = 1; i < n; i++) {
		int u, V;
		cin >> u >> V;
		if (u > V) swap(u, V);  // 统一标记规则
		m[ {u, V}] = 1; // 标记边 (u, v) 存在
		v[u].push_back(V);
		v[V].push_back(u);
	}
	// 二分图染色
	dfs(1, 0);
	// 找到所有颜色不同且没有直接连接的合法边
	for (int i = 1; i <= n; i++) {
		for (int j = i + 1; j <= n; j++) {
			if (color[i] ^ color[j] && !m[ {i, j}]) {
				v2.push_back({i, j});  // 存储合法边
			}
		}
	}
	// 判断谁先手
	if (v2.size() % 2 == 0) {  // 如果合法边数是偶数,后手
		cout << "Second\n";
	} else {
		cout << "First\n" << v2[0].first << ' ' << v2[0].second << "\n";
		m[ {v2[0].first, v2[0].second}] = 1; // 标记已选择的边
	}
	int id2 = 0;
	while (1) {
		int u, v;
		cin >> u >> v;  // 读取高桥的选择
		if (u == -1 && v == -1) {
			return 0;  // 高桥选择退出,游戏结束
		}
		m[ {min(u, v), max(u, v)}] = 1; // 标记已选择的边
		// 跳过已选择的边,找到下一条合法边
		while (m[ {v2[id2].first, v2[id2].second}]) {
			id2++;
		}
		// 输出我的选择
		cout << v2[id2].first << ' ' << v2[id2].second << "\n";
		id2++;
	}
	return 0;
}

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

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

相关文章

‌DeepSeek模型在非图形智能体的应用中是否需要GPU

答&#xff1a;不一定 概念 1、是否需要GPU与应用是否图形处理应用无关 2、文本内容智能体大多也需要GPU来提供更好的性能 3、‌DeepSeek模型在非图形智能体的应用中是否需要GPU取决于具体的模型版本和部署环境 不需要GPU的模型版本 ‌DeepSeek-R1-1.5B‌&#xff1a; 这…

4.14代码随想录第四十三天打卡

图论理论基础 https://www.programmercarl.com/kamacoder/%E5%9B%BE%E8%AE%BA%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 98. 所有可达路径 (1)题目描述: (2)解题思路: #include <iostream> #include <vector> #include <list> using namespace std;vec…

【视频目标分割论文集】Efficient Track Anything0000

github 摘要 视频对象分割和追踪任意目标领域出现了强大的工具——分割任意模型 2&#xff08;SAM 2&#xff09;。SAM 2 实现令人印象深刻的视频对象分割性能的关键组成部分包括用于帧特征提取的大型多阶段图像编码器&#xff0c;以及存储过去帧记忆上下文以辅助当前帧分割的…

码率自适应(ABR)决策的直播场景

直播场景 1. 直播场景的普遍框架与工作原理 主播端&#xff1a;即各类主播&#xff08;游戏、网红歌手、户外达人等&#xff09;&#xff0c;通过手机端或者个人电脑在线直播录制个人活动。 编码服务器&#xff1a;主播端上传视频流以后&#xff0c;编码服务器根据相应的编码转…

SCP-Firmware安全通告:CVE-2024-11863和CVE-2024-11864

安全之安全(security)博客目录导读 目录 一、概述 二、CVE详情 三、受影响产品 四、修复建议 五、致谢 六、版本历史 一、概述 在SCP固件(SCP-Firmware)中发现两处安全漏洞&#xff0c;可能允许普通世界特权软件&#xff08;normal world privileged software&#xff…

双按键控制LED(中断优先级)

1.启动时&#xff0c;两个LED灯熄灭&#xff0c;1秒钟后&#xff08;定时器实现&#xff09;&#xff0c;LED自动点亮&#xff1b; 2.按键1按下后&#xff0c;通过中断int0把两个LED熄灭5s时间&#xff0c;int0优先级设置为最高&#xff08;优先级必须设置&#xff0c;设置后才…

(四)机器学习---逻辑回归及其Python实现

之前我们提到了常见的任务和算法&#xff0c;本篇我们使用逻辑回归来进行分类 分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机场贝叶斯层次聚类隐马尔可夫模型支持向量机高…

代码随想录第17天:二叉树

一、二叉搜索树的最近公共祖先&#xff08;Leetcode 235&#xff09; 由于是二叉搜索树&#xff0c;节点的值有严格的顺序关系&#xff1a;左子树的节点值都小于父节点&#xff0c;右子树的节点值都大于父节点。利用这一点&#xff0c;可以在树中更高效地找到最低公共祖先。 c…

面试篇 - GPT-1(Generative Pre-Training 1)

GPT-1&#xff08;Generative Pre-Training 1&#xff09; ⭐模型结构 Transformer only-decoder&#xff1a;GPT-1模型使用了一个12层的Transformer解码器。具体细节与标准的Transformer相同&#xff0c;但位置编码是可训练的。 注意力机制&#xff1a; 原始Transformer的解…

【从零实现高并发内存池】内存池整体框架设计 及 thread cache实现

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

3.6 函数图像描绘

1.函数描图步骤 2.渐进性 2.1 水平渐进线 2.2 垂直渐进线 2.3 斜渐近线 3.作图

电商中的订单支付(内网穿透)

支付页面 接口文档 Operation(summary"获取订单信息") GetMapping("auth/{orderId}") public Reuslt<OrderInfo> getOrderInfo(Parameter(name"orderId",description"订单id",requiredtrue) PathVaariable Long orderId){OrderI…

ESP32开发之ubuntu环境搭建

1. 在Ubuntu官网下载Ubuntu server 20.04版本https://releases.ubuntu.com/20.04.6/ 2. 在vmware下安装Ubuntu 3. 改Ubuntu静态IP $ sudo vi /etc/netplan/00-installer-config.yaml# This is the network config written by ‘subiquity’ network: renderer: networkd eth…

2025年,HarmonyOS认证学习及考试

HarmonyOS应用开发者认证考试 基础认证 通过系统化的课程学习&#xff0c;熟练掌握 DevEco Studio&#xff0c;ArkTS&#xff0c;ArkUI&#xff0c;预览器&#xff0c;模拟器&#xff0c;SDK 等 HarmonyOS 应用开发的关键概念&#xff0c;具备基础的应用开发能力。 高级认证…

空间信息可视化——WebGIS前端实例(一)

技术栈&#xff1a;原生HTML 源代码&#xff1a;CUGLin/WebGIS: This is a project of Spatial information visualization 4 全国贫困县可视化系统 4.1 系统设计思想 党的十九大报告明确指出,要“确保到2020年我国现行标准下农村贫困人口实现脱贫,贫困县全部摘帽,解决区域…

10.第二阶段x64游戏实战-添加计时器

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;9.第二阶段x64游戏实战-创建项目代码获取人物属性 效果图&#xff1a; 当前游戏…

【论文阅读】MOE奠基论文《Adaptive Mixtures of Local Experts》

《Adaptive Mixtures of Local Experts》 前言一、让协同学习竞争1.1 方案1.2 方案演变的由来 二、让竞争学习协同2.1 竞争学习2.2 竞争学习协同 三、案例验证3.1 任务背景3.2 实验结果3.3 后续工作 (Future Work) 前言 论文提出了一个基于多个分离网络的有监督学习方案,该方案…

VM虚拟机安装及Ubuntu安装配置

VM虚拟机安装及Ubuntu安装配置 1、VM虚拟机安装2、创建虚拟机3、Ubuntu系统安装4、编译环境配置4.1 、Ubuntu和 Windows文件互传 文件互传4.1.1、 开启Ubunt下的FTP服务 4.2、 Ubuntu下NFS和SSH服务开启4.2.1、 NFS服务开启4.2.2、 SSH服务开启 4.3、 交叉编译器安装4.3.1 安装…

【C++ 进阶】泛型算法:概述

目录 一、泛型算法基础概念 1.1 什么是泛型算法&#xff1f; 1.2 核心设计原则 1.3 算法分类体系 1.4 与 STL 容器的关系 二、迭代器&#xff1a;泛型算法的 “钥匙” 2.1 迭代器类型 2.2 迭代器适配器 三、常用泛型算法分类与实战 3.1 非修改型算法&#xff08;只读…

系统与网络安全------Windows系统安全(10)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 域与活动目录 域相关概念 域和域控制器 域&#xff08;Domain&#xff09; 集中管理网络中多台计算机的一种逻辑模式 有别于工作组的对等式管理 是组织与存储资源的核心管理单元 域控制器&#xff08;D…