1011. 森林
题目描述
设有一个包含 n 个顶点的完全图 Kn=(V,E)。
给定 Kn 的 k 个子图:
G1=(V,E1),G2=(V,E2),…,Gk=(V,Ek),
并满足:
- G1,G2,…,Gk 均为无环图;
- ∣E1∣=∣E2∣=⋯=∣Ek∣=m。
记子图 Gi 中的第 j 条边为 ei,j。
定义边集 S 是好的,当且仅当存在 m 个集合 X1,X2,…,Xm,满足:
-
对于每个 1≤i≤m,
Xi⊆⋃j=1kej,i,且 1≤∣Xi∣≤Ci;
-
S=i=1⋃mXi;
-
边集 S 所导出的图 GS=(V,S) 无环。
也就是说,对于每个位置 i,可以从 k 个子图的第 i 条边中选择至少 1 条、至多 Ci 条,并要求最终选出的所有边整体仍然构成一个无环图。
请你求出一个好的边集 S 的最大大小。
输入格式
第一行输入一个正整数 T,表示测试数据组数。
对于每组测试数据:
第一行输入三个整数 n,m,k,分别表示顶点数、每个子图的边数以及子图数量。
第二行输入 m 个整数 C1,C2,…,Cm。
接下来 k 行,第 i 行输入 2m 个整数:
$u_{i,1},v_{i,1},u_{i,2},v_{i,2},\ldots,u_{i,m},v_{i,m}$,
表示子图 Gi 的 m 条边,其中第 j 条边 ei,j 连接顶点 ui,j 和 vi,j。
输出格式
共输出 T 行。
对于每组测试数据,输出一个整数,表示好的边集 S 的最大大小。
数据范围
对于所有测试数据:
- 1≤T≤100;
- 1≤n,m,k≤100;
- 1≤Ci≤k;
- 1≤ui,j,vi,j≤n;
- 所有测试数据满足 ∑n≤200,∑m≤200,∑k≤200。
题目保证给出的每个子图 Gi 均无环。
样例输入
2
2 1 1
1
1 2
5 1 3
3
4 1
1 3
1 3
样例输出
1
2
来源:2026“钉耙编程”中国大学生算法设计暑期联赛第 1 场官方题面。