题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5326
题意:有n个人,给出n-1个关系a b,表示a是b的直属上司,如果c是a的直属上司,我们可以认为c管理a和b共2人,问有多少人可以不多不少管理k个人
思路:数据范围很少,没有环,直接建立一个邻接链表搜索每一个点即可
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
vector <int> G[130];
int vis[130];
int dfs(int u)
{
int tmp=0;
for (int i=0;i<G[u].size();i++)
{
tmp++;
tmp+=dfs(G[u][i]);
}
return tmp;
}
int main()
{
int n,k;
while (scanf("%d%d",&n,&k)!=EOF)
{
memset(G,0,sizeof(G));
memset(vis,0,sizeof(vis));
for (int i=0;i<n-1;i++)
{
int a,b;
scanf("%d%d",&a,&b);
G[a].push_back(b);
}
int res=0;
for (int i=1;i<=n;i++)
{
int tmp=dfs(i);
if (tmp==k)
res++;
}
printf("%d\n",res);
}
}