Mahmoud and a Dictionary CodeForces - 766D 种类并查集

题意

给出多个字符串 然后再输入多个字符串之间的关系 让我们判断这其中是否存在矛盾的关系 有矛盾输出NO 没矛盾输出 YES
然后再输入多个询问 每个询问 两个字符串 让我们判断其中的关系 同义词输出1 反义词输出2 不确定输出3

分析

种类并查集

如果两个字符串的关系 是1 表示同义
那么分情况讨论 如果两个词的根节点相同 那么表示有关系 那么如果与根节点的关系是相同的那么没错 如果与根节点的关系是不同的 那么有错
如果两个词的根节点不同 那么表示没关系 把他们的根节点连到一起
我们用0表示同义词 1表示反义词 当输入ab关系为1时
a 1 0 1 0
b 0 1 1 0 那么 对应的根节点关系可知
为0 0 1 1
当输入ab关系为0时
a 1 0 1 0
b 0 1 1 0 那么对应根节点关系
为1 1 0 0
当两个字符串输入关系为2时
那么如果两个字符根节点不同 那么就把他们连一起 新根节点关系可以有上面的统计结果分析得出
当两个字符串与根节点相同 那么如果他们与根的关系不同 那么没错 如果相同就有矛盾

code


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5+7;
char a[22],b[22];
map<string,int>M;
int f[maxn],rel[maxn];
int find(int x){int t;if(x==f[x])return x;t = find(f[x]);rel[x] = (rel[f[x]]+rel[x]+1)%2;return f[x] = t;
}
int main()
{int n,m,q;scanf("%d%d%d",&n,&m,&q);for(int i=1;i<=n;i++){scanf("%s",a);M[a]=i;}for(int i=1;i<=n;i++)f[i] = i,rel[i] = 1;while(m--){int F;scanf("%d%s%s",&F,a,b);int ta,tb,fa,fb;ta = M[a];tb = M[b];fa = find(ta);fb = find(tb);if(F==1){if(fa==fb){if(rel[ta]==rel[tb])puts("YES");else puts("NO");}else{f[fa] = fb;rel[fa] = (rel[ta]+rel[tb]+1)%2;puts("YES");}}else{if(fa==fb){if(rel[ta]==rel[tb])puts("NO");else puts("YES");}else{f[fa] = fb;rel[fa] = rel[ta]^rel[tb];puts("YES");}}}while(q--){scanf("%s%s",a,b);int ta  = M[a];int tb  = M[b];int fa = find(ta);int fb = find(tb);if(fa!=fb)puts("3");else if(rel[ta]==rel[tb])puts("1");else puts("2");}return 0;
}

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

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

相关文章

几位大佬启蒙老师和女神启蒙老师的博客,大家可以多关注下

Eva_J女神&#xff1a;https://www.cnblogs.com/Eva-J/ 太白金星&#xff1a;http://www.cnblogs.com/jin-xin/articles/7562422.html 金角大王等待唐僧的日子&#xff1a;https://www.cnblogs.com/alex3714/articles/5465198.html Mr.Seven 大佬&#xff1a;http://www.cnblog…

[Leetcode][第63题][JAVA][不同路径2][动态规划][压缩路径]

【问题描述】[中等] 【解答思路】 1. 动态规划流程 第 1 步&#xff1a;设计状态 第 2 步&#xff1a;状态转移方程 第 3 步&#xff1a;考虑初始化 第一行第一列 没有遇到“障碍” 就为1 如果u&#xff08;i&#xff0c;j&#xff09;0 直接返回 0 第 4 步&#xff1a;考虑…

47session 方法

定义一个page1 <% page language"java" import"java.util.*,java.text.*" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"utf-8"&…

Wincc V7.3SE安装截图

打开某个工程出错,能力所限,找不到问题,没能解决 转载于:https://www.cnblogs.com/guyk/p/10555965.html

[剑指offer]面试题第[57-2]题[JAVA][和为s的连续正数序列][数学法][滑动窗口]

【问题描述】[简单] 【解答思路】 1. 滑动窗口 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(1) public int[][] findContinuousSequence(int target) {int i 1; // 滑动窗口的左边界int j 1; // 滑动窗口的右边界int sum 0; // 滑动窗口中数字的和List<int[]&…

[Leetcode][第112题][JAVA][路径总和][递归][队列]

【问题描述】[中等] 【解答思路】 1. 递归 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(H) 从根节点开始&#xff0c;每当遇到一个节点的时候&#xff0c;从目标值里扣除节点值&#xff0c;一直到叶子节点判断目标值是不是被扣完。 class Solution {public boolean…

波动基因

突发奇想&#xff0c;会不会在癌症不同阶段中&#xff0c;同一个基因呈现出多峰的waving状态&#xff0c;这样的基因会不会在癌症阶段的转变中起着作用。 一个小想法&#xff0c;有空了做一下试试&#xff0c;现在暂时确定一下用信息熵来度量waving状态的程度。 坑越挖越多&…

[项目经验]玩转开源项目

搞懂一个开源项目的几大步骤 细看四大模块 1.首先正式开始啃开源项目之前&#xff0c;基础不可少&#xff0c;比如语言底子、网络协议、基本工具、基本应用框架、甚至包括一些设计模式等等&#xff0c;否则人家开源项目很难下牙。 2.正式看一个开源项目时&#xff0c;首先可以全…

Hihocoder #1631 : Cats and Fish 模拟

题意 现有n个鱼 m个猫 每条猫有吃一条鱼所要花去的时间 问最终x分钟后会有多少只完整的鱼 和不完整的鱼 分析 很像操作系统的资源调度的问题 这种卡时间点的问题向来都要好好把 每个步骤所发生的时间给他具体化 我们看每只猫吃一条鱼花去ci分钟 而他是在这一分钟开始的时…

49session的生命周期实例

通过超链接打开的是同一会话 定义一个page1 <% page language"java" import"java.util.*,java.text.*" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <me…

安卓——launchMode

网上的实在看不懂&#xff0c;在这里姑且记录下自己理解了的。 android:launchMode"" 设置Activity的启动模式 standard 每次都会启动一个新的Activity singleTop 会扫描内存栈以保证不会重复创建Activity singleTack 一样会扫描但会移除该Activity之后的全部实例…

[Leetcode]第[58]题[JAVA][最后一个单词的长度][字符串]

【问题描述】[简单] 【解答思路】 直接定位最后一个单词 先找最后一个单词最后一个字母 再找最后一个单词第一个字母 1. 常规做法 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(1) class Solution {public int lengthOfLastWord(String s) {int end s.length() …

The 2014 ACM-ICPC BeiJing D - Dire Wolf HDU - 5115 区间dp

题意 n个狼 排成一排 我们要把一排狼都删除掉 删除一个狼的花费是这个狼的权值和左右两个狼的附加值 求最小花费 分析 考虑区间dp dp[i][j]表示i到j的最小花费 我们可以枚举其中的k 为序列中最后一个删除的元素 然后记忆话搜索 这样下来最深层次的元素最先删除 附加元素…

50session的销毁会话和超时管理

定义一个page1 <% page language"java" import"java.util.*,java.text.*" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"utf-8"&…

Navicat 连接MariaDB 失败: Host '*' is not allowed to connect to this MariaDB server

Navicat 连接MariaDB 失败&#xff1a; Host * is not allowed to connect to this MariaDB server 题描述&#xff1a;Navicat 为管理方便&#xff0c;连接Linux 中Mariadb失败&#xff0c;如下如下错误&#xff1a;Host * is not allowed to connect to this MariaDB server …

[小技巧][JAVA]判断字符串某一位是否是数字/字母

三种方法 1用JAVA自带的函数 数字 Character.isDigit(char ch) 字母 Character.isLetter(char ch) public static boolean isNumeric(String str){for (int i str.length();--i>0;){ if (!Character.isDigit(str.charAt(i))){return false;}}return true;}2用正则表达式…

[密码学基础][信息安全][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第一篇]不同类型的处理器

这是每个密码学博士生应该知道的52件事系列的第一篇文章。PhD研究生在第一年结束的时候应该掌握这些问题。并且尽可能早的在他们能放弃的时候放弃(23333)无论怎样&#xff0c;我们会将这些问题在接下来的一年里表达出来&#xff0c;我自愿的为这个第一个事情的编写做出贡献。这…

android与php使用base64加密的字符串结果不一样解决方法

base64将字符串转换为字节得到同一个值 一.错误 String signString Base64.encodeToString(signContent.getBytes(),Base64.NO_WRAP); 二.正确 byte[] byteSign Base64.encode(signContent.getBytes(),Base64.NO_WRAP); String signString new String(byteSign); 大多使用ba…