CellPhone Network
Time Limit: 1000MS | Memory Limit: 65536K |
Total Submissions: 7165 | Accepted: 2558 |
Description
Farmer John has decided to give each of his cows a cell phone inhopes to encourage their social interaction. This, however, requires him to setup cell phone towers on his N (1 ≤ N ≤ 10,000) pastures (convenientlynumbered 1..N) so they can all communicate.
Exactly N-1pairs of pastures are adjacent, and for any two pastures A and B (1 ≤ A ≤ N;1 ≤ B ≤ N; A ≠ B)there is a sequence of adjacent pastures such that A isthe first pasture in the sequence and B is the last. Farmer John can onlyplace cell phone towers in the pastures, and each tower has enough range toprovide service to the pasture it is on and all pastures adjacent to thepasture with the cell tower.
Help him determine the minimum number of towers he must install toprovide cell phone service to each pasture.
Input
* Line 1: A single integer: N
* Lines 2..N: Each line specifies a pair of adjacent pastures with twospace-separated integers: A and B
Output
* Line 1: A single integer indicating the minimum number of towersto install
SampleInput
5
1 3
5 2
4 3
3 5
SampleOutput
2
Source
算法分析:
题意:在一棵树上选出最小的点集,使得每个点都满足自己在集合中或相连的点在集合中 。
分析:
贪心树的最小支配集思路(点这里)
另一种做法:树形DP。
第一步:以1号点dfs整棵树,求出每个点在DFS中的编号i和每个点的父亲节点编号f[i]。
第二步:按DFS的反向序列检查,如果当前点u既不属于支配集也不与支配集中的点相连,且它的父亲f[u]也不属于支配集,将其父亲点f[u]加入支配集,支配集个数ans加1。标记当前结点u、当前结点的父节点f[u](属于支配集)、当前结点的父节点的父节点f[f[u]](与支配点中的点相连)。
代码实现: