每日一题 --- 亲戚[洛谷][Go]

简介: 每日一题 --- 亲戚[洛谷][Go]

题目:

解题思路:

解题代码:

package main
import (
  "fmt"
)
var n int
var res []int
func main() {
  var (
    m int
    p int
  )
  fmt.Scan(&n)
  fmt.Scan(&m)
  fmt.Scan(&p)
//  画圈
  res = make([]int,n+1)
  // 初始化关系
  for i := 1; i < n + 1; i++ {
    res[i] = i
  }
  for i := 0; i < m; i++ {
    a := 0
    b := 0
    fmt.Scan(&a)
    fmt.Scan(&b)
    join(a,b)
  }
  //for i := 1; i < n+1; i++ {
  //  fmt.Print(res[i]," ")
  //
  //}
//  检查
  var ps = make([][]int,p)
  for i := 0; i < p; i++ {
    a := 0
    b := 0
    fmt.Scan(&a)
    fmt.Scan(&b)
    ps[i] = append(ps[i],a,b)
  }
  //  如果能在a的关系中找到b就说明a和b有关系
  for i := 0; i < p; i++ {
    if judge(ps[i][0],ps[i][1],ps[i][0]) {
      fmt.Println("YES")
    } else {
      fmt.Println("NO")
    }
  }
}
func join(a,b int) {
  if judge(a,b,a) {
    return
  }
  // 找出a的下个元素
  v := res[a]
  // 找出靠b最近的最后一个元素
  k := find(b,b)
  //fmt.Print(k,"= k",v,"= v")
  res[a] = b
  res[k] = v
}
func find(i,j int) int {
  // fmt.Print(res[i],"")
  if res[i] == j {
    return i
  }
  return find(res[i],j)
}
func judge(a,b,c int) bool {
  //fmt.Print(res[a]," ")
  if res[a] == b {
    return true
  }
  if res[a] == c {
    return false
  }
  return judge(res[a],b,c)
}


目录
打赏
0
0
0
0
5
分享
相关文章
快速搭建云服务器
这篇文章教你怎么快速搭建云服务器,你可以用这个云服务器来搭建各种服务,比如可以像这篇文章一样《WordPress搭建个人博客》搭建WordPress网站。
189 5
快速搭建云服务器
使用jstat工具来监控G1垃圾回收器的性能
使用jstat工具来监控G1垃圾回收器的性能
Higress 全新 Wasm 运行时,性能大幅提升
本文介绍 Higress 将 Wasm 插件的运行时从 V8 切换到 WebAssembly Micro Runtime (WAMR) 的最新进展。
55522 64
Qt绘图(线条、椭圆、矩形、图片滚动)
Qt绘图(线条、椭圆、矩形、图片滚动)
797 3
类与类之间的协作模式问题之中介者模式在项目管理中有什么作用
类与类之间的协作模式问题之中介者模式在项目管理中有什么作用
Spring Boot常见企业开发场景应用、自动配置原理结构分析(三)
Spring Boot常见企业开发场景应用、自动配置原理结构分析
什么是GeoTrust?
GeoTrust是著名的证书颁发机构DigiCert的品牌。GeoTrustSSL产品在Internet上提供从基本域名验证到扩展验证SSL标准支持的最高级验证的安全性。 GeoTrust OV(组织验证)证书验证域所有权和组织的存在。在颁发证书之前,会检查该组织在公共数据库中的记录、其电话号码的有效性以及该组织名称是否存在于某个域的Whois查找结果中。
196 0
什么是GeoTrust?
html轮播图
简介:本博客以最通俗移动的详细代码,告诉用户如何用html构建轮播图。
361 0
html轮播图
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等