#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<sstream>
using namespace std;
#define L 101
int N,M;
int x,y;
int g[L][L]; //记录路径
int m;
int sum;
int f[L]; //桶排 => 当有1个比i大时,给i+1
int dfs(int i){ //从i点出发 //距离为s
f[i]++;
int s=1; //子图和自己的数量
for(int j=1;j<=N;j++){
if(g[i][j]){
g[i][j]=0; //先占领后发展
s+= dfs(j);
g[i][j]=1; //回溯
}
}
if(s>=m) sum++;
return s;
}
int main()
{
cin >> N >> M;
//1.建图
for(int i=1;i<=M;i++){
cin >> x >> y;
g[x][y]=1; //单向图
}
//2.遍历图 - 深搜
m = (N+1)/2;
for(int i=1;i<=N;i++){
dfs(i);
}
for(int i=1;i<=N;i++){
if(f[i]>=m+1) sum++;
}
cout << sum;
return 0;
}
/*
5 4
2 1
4 3
5 1
4 2
*/
//cout << "输入:"
练习1 - 珍珠(bead)
最新推荐文章于 2024-05-28 14:43:24 发布