📜  门| Gate IT 2007 |问题22(1)

📅  最后修改于: 2023-12-03 15:28:40.479000             🧑  作者: Mango

门| Gate IT 2007 |问题22

问题描述

在一个有向图中,给出每个节点的入度和出度,问是否存在一条路径经过所有的节点,且每个节点正好经过一次。

输入格式

第一行包含一个整数 $n$,表示有向图的节点个数。

接下来 $n$ 行,每行包含两个整数 $a$ 和 $b$,表示节点 $i$ 的入度和出度。其中 $0\le a,b<n$。

输出格式

如果存在符合要求的路径,输出 YES,否则输出 NO

样例

输入:

3
1 1
1 1
1 1

输出:

YES
题解

此题是图论中的欧拉回路问题。如果存在一个有向图的欧拉回路,那么该图每个节点的入度和出度都为奇数。如果每个节点的入度和出度都为奇数,那么该图必然存在欧拉回路。

因此,我们只需要遍历所有节点的入度和出度,判断每个节点的入度和出度是否都为奇数。若是,输出 YES,否则输出 NO

代码实现
def can_form_euler_circuit(n: int, in_degree: List[int], out_degree: List[int]) -> str:
    for i in range(n):
        if in_degree[i] % 2 == 0 or out_degree[i] % 2 == 0:
            return "NO"
    return "YES"

注:代码实现使用了 Python 语言,需要导入 List。函数 can_form_euler_circuit 的输入参数为节点个数 n、每个节点的入度 in_degree 和出度 out_degree,输出符合要求的路径是否存在。