别人都说直接输出一行中>=k的数目就可以了,但我觉得不保险。不过仔细一想,好像可以证明它是对的,但是我证明不好!所以我就直接写了一个记录性的搜索,代码如下:
#include <stdio.h>
#include <stdlib.h>
int map[200][200];
int n, k;
int ans = 0;
int count[200];
int used[200];
int search(int i)
{
int j, t = 0;
if(count[i]){
return count[i] - 1;
}
if(used[i]){
return 1;
}
used[i] = 1;
for(j = 0; j < n; j++){
if(map[i][j] && search(j)){
t++;
}
}
used[i] = 0;
if(t < k){
count[i] = 1;
return 0;
}
count[i] = 2;
return 1;
}
int main(int argc, char **argv)
{
int i, a;
scanf("%d%d", &n, &k);
for(i = 0; i < n; i++){
while(scanf("%d", &a) == 1){
if(a == 0){
break;
}
a--;
if(map[i][a] == 0){
map[i][a] = 1;
}
if(map[a][i] == 0){
map[a][i] = 1;
}
}
}
for(i = 0; i < n; i++){
if(search(i)){
ans++;
}
}
printf("%d\n", ans);
return 0;
}