首页 > 分享 > 宠物迷路问题与并查集算法

宠物迷路问题与并查集算法

愚蠢的宠物

最新推荐文章于 2018-09-30 23:04:49 发布

My_Fresh_Start 于 2016-01-27 18:07:01 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

题目描述

背景

大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜)。有一天,sheep带着两只宠物到狗狗家时,这两只可爱的宠物竟然迷路了……

描述

狗狗的家因为常常遭到猫猫的攻击,所以不得不把家里前院的路修得非常复杂。狗狗家前院有N个连通的分叉结点,且只有N-1条路连接这N个节点,节点的编号是1-N(1为根节点)。sheep的宠物非常笨,他们只会向前走,不会退后(只向双亲节点走),sheep想知道他们最早什么时候会相遇(即步数最少)。

N的范围《=1000000

输入格式

第1行:一个正整数N,表示节点个数。

第2~N行:两个非负整数A和B,表示A是B的双亲。(保证A,B<=n)

第N+1行:两个非负整数A和B,表示两只宠物所在节点的位置。(保证A,B<=n)

输出格式

输出他们最早相遇的节点号。

样例输入:

10
      1 2
      1 3
      1 4
      2 5
      2 6
      3 7
      4 8
      4 9
      4 10
      3 6

样例输出:1

AC代码:

#include<iostream>

#include<cstdio>

using namespace std;

#define size 1000001

int father[size],rank[size];

int main()

{

int N;

int i,j;

int a,b;

while(~scanf("%d",&N)){

for(i=1;i<=N;i++){

father[i]=i;

rank[i]=0;

}

for(i=1;i<N;i++){

scanf("%d %d",&a,&b);

father[b]=a;

}

scanf("%d %d",&a,&b);

while(1){

rank[a]=1;

a=father[a];

if(a==1){

rank[1]=1;break;

}

}

while(1){

if(rank[b]==1){

printf("%dn",b);break;

}

else{

rank[b]=1;

b=father[b];

}

}

}

return 0;

}

并查集解决,但是和常规的并查集不太一样,需要做标记,刚开始没有做标记WA了

相关知识

宠物社交问题——并查集的应用
深入理解AI训练集、验证集与测试集:数据分割与交叉验证
宠物行为分析算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
提升树算法
宠物声音识别ai算法
开发人工智能新算法,提升宠物领养率
ABC英语角宠物助手算法
温柔算法,让喵星人和汪星人更快找到“家”
python宠物信息管理系统的思路,方法与算法

网址: 宠物迷路问题与并查集算法 https://m.mcbbbk.com/newsview887319.html

所属分类:萌宠日常
上一篇: 十大蠢狗排行榜 哈士奇又傻又蠢经
下一篇: 为什么狗狗都是傻傻的