给定一个二分图,其左部点的个数为 𝑛 ,右部点的个数为 𝑚 ,边数为 𝑒 ,求其最大匹配的边数。 左部点从 1 至 𝑛 编号,右部点从 1 至 𝑚 编号。 输入 输入的第一行是三个整数,分别代表 𝑛 , 𝑚 和 𝑒 。 接下来 𝑒 行,每行两个整数 𝑢 , 𝑣 ,表示存在一条连接左部点 𝑢 和右部点 𝑣 的边。 输出 输出一行一个整数,代表二分图最大匹配的边数。 样例输入 复制 1 1 1 1 1 样例输出 复制 1 提示 对于全部的测试点,保证: - 1 ≤ 𝑛 , 𝑚 ≤ 500 。 - 1 ≤ 𝑒 ≤ 5 × 10 4 。 - 1 ≤ 𝑢 ≤ 𝑛 , 1 ≤ 𝑣 ≤ 𝑚 。
```python # 读取输入的 n, m, e n, m, e = map(int, input().split()) # 初始化邻接表 graph = [[] for _ in range(n + 1)] for _ in range(e): u, v = map(int, input().split()) graph[u].append(v) # 初始化匹配数组,用于记录右部点的匹配情况 match = [0] * (m + 1) # 初始化访问标记数组,用于避免重复访问 visited = [False] * (m + 1) # 匈牙利算法的核心函数,用于尝试为左部点 u 找到匹配 def find(u): for v in graph[u]: if not visited[v]: visited[v] = True if match[v] == 0 or find(match[v]): match[v] = u return True return False # 计算最大匹配的边数 ans = 0 for i in range(1, n + 1): visited = [False] * (m + 1) if find(i): ans += 1 # 输出最大匹配的边数 print(ans) ``` [2025-12-13 21:24:15 | AI问答 | 275点数解答]
相关提问
- [字节豆包] 题目描述 午饭时间,喵喵喵幼儿园的n位小朋友从左到右排成一列等待领取自己的午餐。我们 将这些小朋友从左到右依次标号为 1,2,⋯,n−1,n。 负责配餐的老师已经拿到了所有人的午饭餐食,餐食同样也是从左到右排成一排。 老师手里拿到了一份序列 r1 ⋯rn,代表编号为i的小朋友应该拿到从左向右数第 ri份 午餐餐食(1≤ri≤n且 ri两两不同)。 按照上面的序列分发完成后,老师又拿到了一个序列 a1⋯an,其中 a i代表未分发前从 左向右数第 i 份餐食的一个参数。 老师想要知道,对每个小朋友,他们所拿到的午餐的这个参数的值是多少。但是这个 任务对于老师来说太难了,所以喵喵喵幼儿园找到了万能的你。 输入格式 共三行。 第一行一个整数,代表 n。 第二行 n 个整数,代表 r1⋯rn。 第三行 n 个整数,代表 a1⋯an。 输出格式 一行,n 个整数。第 i 个整数代表编号为 i 的小朋友所拿到的午餐的这个参数是多 少。 输入输出样例 输入 #1 4 4 1 3 2 7 4 2 9 输出 #1 9 7 2 4 说明/提示 样例解释 编号(481点数解答 | 2025-11-16 19:24:11)56
- [字节豆包] 题目描述 最近有 n 个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 m 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。 输入格式 第一行有两个用空格隔开的整数,分别代表 n 和 m。 第 2 到第 (n+1) 行,每行一个整数,第 (i+1) 行的整数 a i 代表第 i 件事的刺痛值 a i 。 输出格式 输出一行一个整数,表示连续 m 个刺痛值的和的最小值是多少。 输入输出样例 输入 #1复制 8 3 1 4 7 3 1 2 4 3 输出 #1复制 6 说明/提示 数据规模与约定 对于 30% 的数据,保证 n≤20。 对于 60% 的数据,保证 n≤100。 对于 90% 的数据,保证 n≤10 3 。 对于 100% 的数据,保证 0≤m≤n≤3×10 3 ,1≤a i ≤100。 用c++语言(241点数解答 | 2025-11-24 19:52:43)66
- [字节豆包] 题目描述 请根据邮件的重量和用户选择是否加急计算邮费。计算规则: 重量在 1000 1000 以内(包括),基本费 8 8 元; 超过 1000 1000 克的部分,每 500 500 克加收超重费 4 4 元,不足 500 500 克部分按 500 500 克计算; 如果用户选择加急,多收 5 5 元。 输入格式 一行,包含一个正整数 x x 和一个字符 c(y 或 n),之间用一个空格隔开,分别表示重量和是否加急。 如果字符是 y,说明选择加急;如果字符是 n,说明不加急。 输出格式 输出一行一个正整数,表示邮费。 输入输出样例 输入 #1复制 1200 y 输出 #1复制 17 说明/提示 对于100%数据 1 ≤ x ≤ 1 0 6 1≤x≤10 6 在洛谷, 享受 coding 的欢乐(88点数解答 | 2024-11-09 15:33:30)377
- [阿里通义] 题目描述 请根据邮件的重量和用户选择是否加急计算邮费。计算规则: 重量在 1000 1000 以内(包括),基本费 8 8 元; 超过 1000 1000 克的部分,每 500 500 克加收超重费 4 4 元,不足 500 500 克部分按 500 500 克计算; 如果用户选择加急,多收 5 5 元。 输入格式 一行,包含一个正整数 x x 和一个字符 c(y 或 n),之间用一个空格隔开,分别表示重量和是否加急。 如果字符是 y,说明选择加急;如果字符是 n,说明不加急。 输出格式 输出一行一个正整数,表示邮费。 输入输出样例 输入 #1复制 1200 y 输出 #1复制 17 说明/提示 对于100%数据 1 ≤ x ≤ 1 0 6 1≤x≤10 6 在洛谷, 享受 coding 的欢乐(554点数解答 | 2024-11-09 15:34:05)385
- [字节豆包] 请根据邮件的重量和用户选择是否加急计算邮费。计算规则: 重量在 1000 1000 以内(包括),基本费 8 8 元; 超过 1000 1000 克的部分,每 500 500 克加收超重费 4 4 元,不足 500 500 克部分按 500 500 克计算; 如果用户选择加急,多收 5 5 元。 输入格式 一行,包含一个正整数 x x 和一个字符 c(y 或 n),之间用一个空格隔开,分别表示重量和是否加急。 如果字符是 y,说明选择加急;如果字符是 n,说明不加急。 输出格式 输出一行一个正整数,表示邮费。 输入输出样例 输入 #1复制 1200 y 输出 #1复制 17 说明/提示 对于100%数据 1 ≤ x ≤ 1 0 6 1≤x≤10 6(244点数解答 | 2024-12-31 19:36:29)292
- [字节豆包] 给定一个二分图,其左部点的个数为 𝑛 ,右部点的个数为 𝑚 ,边数为 𝑒 ,求其最大匹配的边数。 左部点从 1 至 𝑛 编号,右部点从 1 至 𝑚 编号。 输入 输入的第一行是三个整数,分别代表 𝑛 , 𝑚 和 𝑒 。 接下来 𝑒 行,每行两个整数 𝑢 , 𝑣 ,表示存在一条连接左部点 𝑢 和右部点 𝑣 的边。 输出 输出一行一个整数,代表二分图最大匹配的边数。 样例输入 复制 1 1 1 1 1 样例输出 复制 1 提示 对于全部的测试点,保证: - 1 ≤ 𝑛 , 𝑚 ≤ 500 。 - 1 ≤ 𝑒 ≤ 5 × 10 4 。 - 1 ≤ 𝑢 ≤ 𝑛 , 1 ≤ 𝑣 ≤ 𝑚 。(275点数解答 | 2025-12-13 21:24:15)31
- [GPT] 题目描述 请根据邮件的重量和用户选择是否加急计算邮费。计算规则: 重量在 1000 1000 以内(包括),基本费 8 8 元; 超过 1000 1000 克的部分,每 500 500 克加收超重费 4 4 元,不足 500 500 克部分按 500 500 克计算; 如果用户选择加急,多收 5 5 元。 输入格式 一行,包含一个正整数 x x 和一个字符 c(y 或 n),之间用一个空格隔开,分别表示重量和是否加急。 如果字符是 y,说明选择加急;如果字符是 n,说明不加急。 输出格式 输出一行一个正整数,表示邮费。(45点数解答 | 2024-12-16 22:26:01)347
- [GPT] 题目描述 请根据邮件的重量和用户选择是否加急计算邮费。计算规则: 重量在 1000 1000 以内(包括),基本费 8 8 元; 超过 1000 1000 克的部分,每 500 500 克加收超重费 4 4 元,不足 500 500 克部分按 500 500 克计算; 如果用户选择加急,多收 5 5 元。 输入格式 一行,包含一个正整数 x x 和一个字符 c(y 或 n),之间用一个空格隔开,分别表示重量和是否加急。 如果字符是 y,说明选择加急;如果字符是 n,说明不加急。 输出格式 输出一行一个正整数,表示邮费。(38点数解答 | 2024-12-16 22:27:37)257
- [字节豆包] 题目描述 对于 A 1 , A 2 , A 3 , ⋯ , A N A 1 ,A 2 ,A 3 ,⋯,A N ,求 ( 6 × ∑ i = 1 N ∑ j = i + 1 N ∑ k = j + 1 N A i × A j × A k ) m o d ( 10 9 + 7 ) (6× i=1 ∑ N j=i+1 ∑ N k=j+1 ∑ N A i ×A j ×A k )mod(10 9 +7) 输入格式 第 1 行,1 个整数 N N。 第 2 行, N N 个整数 A 1 , A 2 , A 3 , ⋯ , A N A 1 ,A 2 ,A 3 ,⋯,A N 。 输出格式 1 个整数,表示所求的值。 输入数据 1 3 1 2 3 输出数据 1 36 提示 对于 30 % 30% 的数据, N ≤ 500 N≤500; 对于 60 % 60% 的数据, N ≤ 5000 N≤5000; 对于 100 % 100% 的数据, 3 ≤ N ≤ 10 (433点数解答 | 2025-08-15 12:14:14)131
- [DeepSeek] 小核桃准备使用 a 数组,存储战力为1~10的守卫各有多少个。 即:a[1] 存储战斗力为1的守卫数量,a[2] 存储战斗力为 2 的守卫数量,... 依次类推,a[10] 存储战斗力为 10 的守卫数量。 请你编写程序,使用数组依次存储战力1~10的守卫数量,并按数组下标顺序(从小到大),依次输出每个守卫的战力。 样例1解释: 样例1 输入数据依次表示:战力为1 的守卫有 3 个,战力为3的守卫有 1 个,战力 为4 的守卫有 2 个,战力为 8 的守卫有 2 个,其余战力为2.5.6.7.9.10的守卫数量都为 0。 所以依次输出 三 个 1,一个 3,两个 4,两个 8。 输入: 十个整数,即1~10中每个数的个数。 输出: 一行若干个整数,为从小到大排好序的数,相邻数字之间用空格隔开。 c++(130点数解答 | 2026-01-17 14:11:22)31
- [字节豆包] 你要开始一场数轴旅行,初始时,你所在的位置为 � = 0 x=0 ,你想要去 � = � x=d 位置。 给定 � n 个整数 � 1 , � 2 , . . . , � � a 1 ,a 2 ,...,a n ,表示每次你可以往左移动 � � a i 个单位或往右移动 � � a i 个单位。 请问,最终能否到达 � = � x=d 位置?能则输出 Yes,不能输出 No。 输入 输入共两行: 第一行,两个整数 n,d 第二行,n 个正整数 输出 输出能否达到最终目标位置。 样例输入 复制 2 -4 6 8 样例输出 复制 Yes 提示 对于 30 % 30% 的数据,满足 1 ≤ � ≤ 10 1≤n≤10, 1 ≤ � � ≤ 10 1≤a i ≤10, − 20 ≤ � ≤ 20 −20≤d≤20。 对于 60 % 60% 的数据,满足 1 ≤ � ≤ 1 0 3 1≤n≤10 3 , 1 ≤ � � ≤ 1 0 3 1≤a i ≤10 3 , − 1 0 4 ≤ � ≤ 1 0 4 −10 4 ≤d(225点数解答 | 2026-01-23 19:51:03)27
- [字节豆包] 请使用python编程为data={'莱科宁': '236 - 编号:51', '汉密尔顿': '358 - 编号:55', '维泰尔': '294 - 编号:34', '维斯塔潘': '216 - 编号:10', '博塔斯': '227 - 编号:46'}对积分进行排名(182点数解答 | 2024-10-20 16:16:44)255