TYVJ 1112 舞会2 解题报告
别人都说直接输出一行中>=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; }