代码如下
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int ls[100010];
bool in[100010];
int n, m, ans = 0;
vector<int> g[100010];
int dfs(int n)
{
if(ls[n]) return ls[n];
if(!g[n].size()) return 1;
int num = 0;
for(int i = 0; i < g[n].size(); ++i)
{
num += dfs(g[n][i]);
}
ls[n] = num;
return num;
}
int main()
{
scanf("%d %d", &n, &m);
while(--m)
{
int u, v;
scanf("%d %d", &u, &v);
g[u].push_back(v);
in[v] = true;
}
for(int i = 1; i <= n; i++)
{
if(g[i].size() && !in[i]) ans += dfs(i);
}
printf("%d", ans);
return 0;
}