Work
大致题意:给你一些关系,告诉你某某人直接领导某某人,现在要求有n个部下的人有多少;
用dfs做,并用p数组进行记录,以免重复运算
代码附上
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN=120;
int n;
int lead[MAXN][MAXN],p[MAXN];
int doit(int x)
{
int i,sum=0;
for (i=1;i<=n;i++)
if (lead[x][i]==1)
if (p[i]!=0) sum+=p[i]+1;
else sum+=doit(i)+1;
p[x]=sum;
return sum;
}
int main()
{
int k,i,a,b,num;
while (cin>>n>>k)
{
memset(p,0,sizeof(p));
memset(lead,0,sizeof(lead));
for (i=1;i<=n-1;i++)
{
cin>>a>>b;
lead[a][b]=1;
}
for (i=1;i<=n;i++)
if (p[i]==0)
p[i]=doit(i);
num=0;
for (i=1;i<=n;i++)
if (p[i]==k) num++;
cout<<num<<endl;
}
}