具体:http://www.verydemo.com/demo_c92_i155183.html
这题考察的是最大独立集问题, 算是裸的二分匹配, 只要在计算上添加一个n - count/2 就可以直接得出结果了。
不管是男的还是女的都一样,因为你男的算一边,女的再算一遍,这样算两遍, 不管你这个学号是男的还是女的,一点影响都没有。
#include #include maxn 505 e[maxn][maxn], n, m, dist[maxn], visit[maxn]; Init() { i, j, u, v, num; chr; memset(e, , (e)); memset(dist, , (dist)); (i=; i<= n; i++) { scanf(, &u); u++; (scanf(, &chr), chr!= ); (scanf(, &chr), chr!= ); scanf(, &num); (scanf(, &chr), chr!= ); (j=; j<=num; j++) { scanf(, &v); v++; e[u][]++; e[u][e[u][]] = v; } } ; } Dfs( now) { i, v; (i=; i<=e[now][]; i++) { v = e[now][i]; (visit[v] == ); visit[v] = ; (dist[v] == || Dfs(dist[v]) == ) { dist[v] = now; ; } } ; } Funs() { i, count = ; (i=; i<=n; i++) { memset(visit, , (visit)); (Dfs(i) == )count ++; } printf(, n - count/); ; } main() { (scanf(, &n)!= EOF) { Init(); Funs(); } ; }