Problem Description It’s an interesting experience to move from ICPC to work, end my college life and start a brand new journey in company. As is known to all, every stuff in a company has a title, everyone except the boss has a direct leader, and all the relationship forms a tree. If A’s title is higher than B(A is the direct or indirect leader of B), we call it A manages B. Now, give you the relation of a company, can you calculate how many people manage k people.
Input There are multiple test cases.
Output For each test case, output the answer as described above.
Sample Input 7 2 1 2 1 3 2 4 2 5 3 6 3 7
Sample Output 2
题意就是让你找到一共有几个节点使得这个节点的所有子节点一共有k个。
|
#include <bits/stdc++.h>
using namespace std;
vector<int>a[109];
int b[200];
int dp[200];
void dfs(int x)
{
dp[x]=0;
for(int i=0; i<a[x].size(); i++)
{
int y=a[x][i];
dfs(y);
dp[x]+=dp[y]+1;
}
}
int main()
{
int n,m;
while(cin>>n>>m)
{
for(int i=1; i<=n; i++)
a[i].clear();
for(int i=1; i<n; i++)
{
int x,y;
cin>>x>>y;
a[x].push_back(y);
b[y]++;
}
int root=0;
for(int i=1; i<=n; i++)
{
if(b[i]==0)
{
root=i;
break;
}
}
dfs(root);
int ans=0;
for(int i=1; i<=n; i++)
{
if(dp[i]==m)
ans++;
}
cout<<ans<<endl;
}
return 0;
}