当前位置: 首页 > ds >正文

访问计划(C++)

题目描述

Farmer John 计划建造 N(1≤N≤10^5)个农场,用 N−1 条道路连接,构成一棵树(也就是说,所有农场之间都互相可以到达,并且没有环)。每个农场有一头奶牛,品种为更赛牛或荷斯坦牛之一。

Farmer John 的 M 个朋友(1≤M≤10^5)经常前来拜访他。在朋友 i 拜访之时,Farmer John 会与他的朋友沿着从农场 Ai 到农场 Bi 之间的唯一路径行走(可能有 Ai=Bi)。除此之外,他们还可以品尝他们经过的路径上任意一头奶牛的牛奶。由于 Farmer John 的朋友们大多数也是农场主,他们对牛奶有着极强的偏好。他的有些朋友只喝更赛牛的牛奶,其余的只喝荷斯坦牛的牛奶。任何 Farmer John 的朋友只有在他们访问时能喝到他们偏好的牛奶才会高兴。

请求出每个朋友在拜访过后是否会高兴。

输入格式

输入的第一行包含两个整数 N 和 M。 第二行包含一个长为 N 的字符串。如果第 i 个农场中的奶牛是更赛牛,则字符串中第 i 个字符为 'G',如果第 i 个农场中的奶牛是荷斯坦牛则为 'H'。 以下 N−1 行,每行包含两个不同的整数 X 和 Y(1≤X,Y≤N),表示农场 X 与 Y 之间有一条道路。 以下 M 行,每行包含整数 Ai,Bi,以及一个字符 Ci。Ai 和 Bi 表示朋友 i 拜访时行走的路径的端点,Ci 是 'G' 或 'H' 之一,表示第 i 个朋友喜欢更赛牛的牛奶或是荷斯坦牛的牛奶。

输出格式

输出一个长为 M 的二进制字符串。如果第 i 个朋友会感到高兴,则字符串的第 i 个字符为 '1',否则为 '0'。

样例输入
5 5
HHGHG
1 2
2 3
2 4
1 5
1 4 H
1 4 G
1 3 G
1 3 H
5 5 H
样例输出
10110
提示

在这里,从农场 1 到农场 4 的路径包括农场 1、2 和 4。所有这些农场里都是荷斯坦牛,所以第一个朋友会感到满意,而第二个朋友不会。 测试点 2-5 满足 N≤10^3,M≤2⋅10^3。

 思路

运用并查集,将相连的且有相同种类的农场并在一起。

判断时有三种情况:

1.起点和终点不在同一集合,说明路上一定会有两种奶牛,记为'1';

2.起点和终点在同一集合,且奶牛种类为朋友要求的,记为'1';

3.起点和终点在同一集合,但奶牛种类不是朋友要求的,记为'0'。

代码(可自行优化)

#include<bits/stdc++.h>
using namespace std;
int n, m, u, v,num=0;
int father[100100];
char q[100100],p[100100];int find(int t) {if (father[t] != t) {father[t] = find(father[t]);}return father[t];
}int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) {cin >> q[i];}for (int i = 1; i <= n; i++) {father[i] = i;}for (int i = 1; i < n; i++) {scanf("%d%d", &u, &v);if (q[u] == q[v]) {if (find(u) != find(v)) {father[find(u)] = find(v);}}}for (int i = 1; i <= m; i++) {int a, b;char c;scanf("%d%d", &a, &b);cin>>c;if (find(a) != find(b)) p[num]='1',num++;else {if (q[find(a)] == c) p[num]='1',num++;else p[num]='0',num++;}} for(int i=0;i<num;i++) cout<<p[i];return 0;
}

http://www.xdnf.cn/news/4247.html

相关文章:

  • BC9 printf的返回值
  • 学习路线(工业自动化软件架构)
  • Imagine Explainers:AI × 可视化 × 趣味讲解,让复杂变简单
  • 1. 设计哲学与核心价值
  • C/C++滑动窗口算法深度解析与实战指南
  • 2025年第十六届蓝桥杯省赛JavaB组真题
  • 【RocketMQ Broker 相关源码】-注册 broker 信息到所有的 NameServer
  • gcc/g++用法摘记
  • torch.nn.Sequential() and torch.nn.ModuleList()
  • 用输入输出变量根据超稳定性理论设计模型参考自适应系统
  • 迭代器模式
  • map和set的设计以及红黑树的设计
  • 英伟达语音识别模型论文速读:Fast Conformer
  • 学习黑客Nmap 实战
  • Java学习手册:Spring 多数据源配置与管理
  • 信息系统项目管理工程师备考计算类真题讲解十二
  • 破局者手册 Ⅰ:测试开发核心基础,解锁未来测试密钥!
  • 【NLP】27. 语言模型训练以及模型选择:从预训练到下游任务
  • RAG知识库只是表面简单!
  • Kubernetes排错(七)-节点排错
  • 除了java.nio.file.StandardCopyOption,还有哪些类可以实现文件的复制和移动?
  • C++动态库和静态库的生成和使用
  • linux crash工具详解
  • android-ndk开发(1): 搭建环境
  • 星途-(4)
  • 关于Python:9. 深入理解Python运行机制
  • DeepSeek技术发展详细时间轴与技术核心解析
  • ARM子程序调用与返回
  • vscode运行python的快捷键
  • VirtualBox调整虚拟机内存和CPU