题面描述
塔子哥组织了一场小朋友的游戏。共有 n 个小朋友,编号为 0 ~ n - 1,每个小朋友身后都有一根绳子。一个小朋友可以牵多个同学,也可以不牵别人,但一个小朋友最多只能被一个小朋友牵,因此这些牵引关系最终会形成树形结构。
现在塔子哥要给一些小朋友发糖果。拿到糖果的小朋友会开心,没有拿到糖果的小朋友不会开心。要求每一根绳子的两端,至少有一个小朋友是开心的。
也就是说,对于树上的每一条边,至少要选择这条边的一个端点发糖果。目标是在满足条件的前提下,使发出的糖果数量最少。
因此,本题可以转化为:树上的最小点覆盖问题。
P2352.第3题-分糖果方案
题目描述
小明组织小朋友们在玩一场小游戏, 一共有n个小朋友, 编号为0...n−1, 每个小朋友身后都有一根绳子, 一个小朋友可以不拿或者拿多个同学的绳子, 拿完之后小明会让小朋友们保持不动, 给小朋友发糖果。
给一个小朋友分糖果, 他就会开心, 否则他就会不开心。
可是小明的糖果没有很多了, 怎么分才能使最少的糖果让每个绳子两头都最少有一个开心的小朋友呢
(一个小朋友只能被一个小朋友牵, 一个小朋友可以牵多个小朋友, 最终类似一个树形结构, 题目保证所有小孩子都牵了人或者被人牵)
输入描述
第一行一个整数n,表示小朋友数量(1≤n≤1500)
接下来n行,每行以a:(b) 这样的格式开头,a表示小朋友的编号(0≤a≤n−1)
b表示第i个小朋友牵了几个小朋友,接下来b个数,表示被牵的小朋友的编号
输出描述
一个数字,为需要的糖果的最少个数
样例
输入1
3
0:(2) 1 2
1:(0)
2:(0)
输出1
1
说明
0号小朋友与1号和2号相连,那么只需要给0号发一个糖果就可使得所有绳子两端都有开心的小朋友
输入2
8
0:(3) 1 2 3
1:(1) 6
2:(0)
3:(0)
6:(1) 7
7:(2) 4 5
4:(0)
5:(0)
输出2
3
说明
给 0, 6, 7号小朋友发糖果, 就可使得所有绳子两端都有开心的小朋友