朋友圈问题, quick_fond算法, 森林,并查集
时间:2021-08-15
本文章向大家介绍朋友圈问题, quick_fond算法, 森林,并查集,主要包括朋友圈问题, quick_fond算法, 森林,并查集使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
所谓一个朋友圈子,不一定其中的人都互相直接认识。
例如:小张的朋友是小李,小李的朋友是小王,那么他们三个人属于一个朋友圈。
现在给出一些人的朋友关系,人按照从 1到 n编号在这中间会进行询问某两个人是否属于一个朋友圈,请你编写程序,实现这个过程。
输 入
第一行输入两个整数 n,m(1≤n≤10000,3≤m≤100000),分别代表人数和操作数。
接下来 m行,每行三个整 a,b,c(a∈[1,2], 1≤b,c≤n)当 a=1时,代表新增一条已知信息,b,c是朋友当 a=2
时,代表根据以上信息,询问 b,c是否是朋友
输 出
对于每个 a=2 的操作,输出『Yes』或『No』
代表询问的两个人是否是朋友关系。
样例输入
6 5
1 1 2
2 1 3
1 2 4
1 4 3
2 1 3
样例输出
No
Yes
#include <stdio.h>
#include <stdlib.h>
typedef struct unionSet {
int *color, n;
}UnionSet;
UnionSet *init(int n) {
UnionSet *u = (UnionSet *)malloc(sizeof(UnionSet));
u->color = (int *)malloc(sizeof(int) * n);
u->n = n;
for (int i = 0; i < n; i++) u->color[i] = i;
return u;
}
int fine(UnionSet *u, int n) {
if (!u) return -1;
return u->color[n];
}
int merge(UnionSet *u, int j1, int j2) {
if (!u) return -1;
int temp = u->color[j1];
for (int i = 0; i < u->n; i++) u->color[i] - temp || (u->color[i] = u->color[j2]);
return 1;
}
void clear(UnionSet *u) {
if (!u) return ;
free(u->color);
free(u);
return ;
}
int main() {
int n, m, a, b, c;
scanf("%d%d", &n, &m);
UnionSet *u = init(n);
for (int i = 0; i < m; i++) {
scanf("%d%d%d", &a, &b, &c);
--b, --c;
a ^ 1 && printf("%s\n", fine(u, b) ^ fine(u, c) ? "No" : "Yes") || merge(u, b, c);
}
clear(u);
return 0;
}
原文地址:https://www.cnblogs.com/hhhahh/p/15143843.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- TypeScript 类型系统
- 图解 Java 线程生命周期
- sql 基础命令
- python自学成才之路 列表,元组,集合详细用法
- 备战秋招-面经篇-[二十一]
- 高性能 Java 应用层网关设计实践
- redis实战第十五篇 redis cluster的批处理中ask重定向解决方案
- 干货 | Elasticsearch 运维实战常用命令清单
- 备战秋招-面经篇-[二十二]
- 快速上手Spring-Data-Redis
- Lua 5.1 参考手册
- 图文详解k8s自动化持续集成之GitLab CI/CD
- Harbor v2.0 镜像回收那些事
- redis实战第十四篇 redis cluster ask重定向
- Go命令官方指南【原译】