亲戚(relation.cpp)

时间限制: 1 Sec  内存限制: 64 MB

题目描述
若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易。 现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 我们规定:如果x和y是亲戚,y和z是亲戚,那么x和z也是亲戚;如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。
输入
第一行:三个整数n,m,p,(n≤5000,m≤5000,p≤5000),分别表示有n个人,m个亲戚关系,询问p对亲戚关系。 以下m行:每行两个数Mi,Mj,1≤Mi,Mj≤N,表示Ai和Bi具有亲戚关系。 接下来p行:每行两个数Pi,Pj,询问Pi和Pj是否具有亲戚关系。
输出
P行,每行一个’Yes’或’No’。表示第i个询问的答案为“具有”或“不具有”亲戚关系。
样例输入
6 5 3
1 2
1 5
3 4
5 2
1 3
1 4
2 3
5 6
样例输出

Yes
Yes

No

#------------------------------------------------------------------------------#

好经典的并查集题!

哎,这道题告诉了我们一件事:

不要相信书!!

……不想说了,本来用书上的方法做,递归找输入两人的爸爸,只要不一样,就统一他们,这种算法最后可以发现,每次只能更新一个,事实上这两个人他们是有另外的亲戚的,如果这样做是无法更新他们的。

这种方法可以过样例

于是,我和我的小伙伴(大概3个人都这么的)高高兴兴地交了

……只过了2个点。

送个数据:

13 12 5
1 2
4 5
3 5
3 4
1 3
5 6
12 13
7 8
9 8
10 11
8 11
8 10

(后面加你要查的人)

好吧,最终到底该怎么做呢

首先,输入x,y,不要那恶心的递归,只需要加一个循环,i从1到n,如果father[x]==father[i]便代表i是x的亲戚,所以father[i]=father[y],统一他们的爸爸,当然,x也在其中,就不需要单独处理了。

注意!!!

要先把father[x]存起来,再依次比,因为一旦x改变了,他就与后面的亲戚的爸爸不一样了,也就不能改变了。

就是没把father[x]存起来,我改了半个小时(香菇)……


就这样了,代码:

#include<cstdio>
int father[5005];
int n,m,p;
int main()
{freopen("relation.in","r",stdin);freopen("relation.out","w",stdout);//文件输入输出int x,y;scanf("%d%d%d",&n,&m,&p); for(int i=1;i<=n;i++)father[i]=i;//一定要先把爸爸设置为自己,不然……后面什么都不会发生for(int i=1;i<=m;i++){scanf("%d%d",&x,&y);//读入两个亲戚x,yif(father[x]!=father[y])//只要他们的爸爸不同{int t=father[x];//先用临时变量将x的爸爸存起来for(int j=1;j<=n;j++)if(t==father[j])//只要i的爸爸跟x的爸爸一样(他们为亲戚)father[j]=father[y];//统一爸爸}}for(int i=1;i<=p;i++){scanf("%d%d",&x,&y);if(father[x]==father[y])//他们爸爸一样printf("Yes\n");//是亲戚elseprintf("No\n");//反之则不是}return 0;
}

By WZY

【图】【并查集】亲戚相关推荐

  1. java并查集找朋友圈_图—并查集(解决朋友圈问题)

    图也是一种 非线性结构,是由多个顶点组成的关系集合组成的一种数据结构.图可以分为两种,无向图和有向图. ★图的定义: ★典型问题: 利用图能够解决很多问题,这里有一个较为典型的问题,假如已知有n个人和 ...

  2. 亲戚关系关系算法java程序_C++并查集亲戚(Relations)算法实例

    本文实例讲述了C++并查集亲戚(Relations)算法.分享给大家供大家参考.具体分析如下: 题目: 亲戚(Relations) 或许你并不知道,你的某个朋友是你的亲戚.他可能是你的曾祖父的外公的女 ...

  3. 并查集——亲戚(洛谷 P1551)

    题目选自洛谷P1551 并查集入门题目,简单有趣的例子了解并查集的使用 主要分为三个操作: 1)初始化 没有什么说的,就是用下标当做标号. 2)合并操作 如果两个关系的"老大"不一 ...

  4. 牛客 - 牛半仙的妹子图(并查集+bitset/克鲁斯卡尔重构树+主席树)

    题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的连通图,每个点都有一种颜色,每条边都有一个权值,现在规定一个起点 st,再给出 q 次询问,每次询问给出区间 [ l , r ] , ...

  5. 杭电1232(图—并查集)

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. 【算法训练营】 - ⑩ 并查集与图

    [算法训练营] - ⑩ 并查集与图 并查集 并查集特征 并查集的优化 图 图结构的表达 图的面试题如何搞定? 图的数据结构 点 边 图 生成图 图算法 广度优先遍历 深度优先遍历 图的拓扑排序算法 最 ...

  7. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

  8. CF990G GCD Counting(树上莫比乌斯反演,分层图,并查集)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Problem 给定一棵点带权无根树,对于每个 k∈[1,2×105]k\in[1,2\times10 ...

  9. 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...

    点击上方蓝字,和我一起学技术. 今天是算法和数据结构专题的第19篇文章,我们一起来看看最小生成树. 我们先不讲算法的原理,也不讲一些七七八八的概念,因为对于初学者来说,看到这些术语和概念往往会很头疼. ...

最新文章

  1. 《结网》十年,《结网2》开启产品经理的无限游戏
  2. ReSharper 配置及用法(转)
  3. 删除字符问题(贪心)
  4. 正面管教之PHP_正面管教
  5. maven pom resources标签的使用示例
  6. 【css】行高的计算
  7. Appium+python的单元测试框架unittest(2)——fixtures(转)
  8. J2Pay –完整示例
  9. supersocket新的配置属性 textEncoding
  10. bugzilla使用_如何使用Bugzilla提交错误报告
  11. php用jquery-ajax上传多张图片限制图片大小
  12. 【优化预测】基于matlab蝙蝠算法优化LSSVM预测【含Matlab源码 109期】
  13. 最新消息:原谷歌中国副院长刘骏任职人民搜索首席科学家
  14. xml 处理大于号与小于号
  15. 指针pt的值(pt,pt,*pt)
  16. 基于ResNet50网络的简单垃圾分类网络
  17. c语言实现动态心型代码
  18. hadoop暂时/永久关闭安全模式
  19. GDAL python教程基础篇(2)——用OGR写入矢量数据
  20. 读书笔记:《从一到无穷大》

热门文章

  1. 重庆理工大学两江校区计算机学院,重庆理工大学两江校区概况
  2. 使用 Java 实现指定概率的抽奖
  3. opencv多摄像头测试
  4. 一个人的旅行之澳门 十八岁出门远行
  5. python 3.4.3 下载安装与环境配置 pip
  6. Typora + GitHub云笔记本
  7. python 小说 云_用python实现自己的小说阅读器
  8. 前途无忧-学费分期、招生就业服务平台
  9. shell开启飞行模式_提醒丨用了这么多年手机才知道,飞行模式还藏着这6个功能...
  10. vue子组件methods中获取props的值