#coding:utf-8
# class Point:
# def __init__(self, a=0, b=0):
# self.x = a
# self.y = b
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 能回到1号点返回 Yes,否则返回 No
# @param param int整型一维数组 param[0] 为 n,param[1] 为 m
# @param edge Point类一维数组 Point.x , Point.y 分别为一条边的两个点
# @return string字符串
#
class Solution:
def solve(self , param , edge):
visited = set() # 记录访问过的点
# 深度优先搜索(DFS)
def dfs(node, parent):
if node in visited:
return node == 1 # 如果回到 1 号点,说明形成了环
visited.add(node)
for e in edge:
if e.x == node and e.y != parent:
if dfs(e.y, node): # 发现环,直接返回 True
return True
elif e.y == node and e.x != parent:
if dfs(e.x, node): # 发现环,直接返回 True
return True
return False # 这一轮 DFS 没找到环,返回 False
# 先检查 1 号点是否有连接的边
if not any(e.x == 1 or e.y == 1 for e in edge):
return "No"
# 从 1 号点开始 DFS
if dfs(1, -1):
return "Yes"
return "No"