zoukankan      html  css  js  c++  java
  • POJ 1466 Girls and Boys(最大独立集)

    题目链接

    解题思路

      题目要求互相没有关系的最大集合,那么等于说t除最少的点,使剩下的点没有相互关系,也等于用最少的点覆盖所有关系,问题就转化成了求最小点覆盖问题了。

    代码

    const int maxn = 5e2+10;
    const int maxm = 1e3+10;
    int n, vis[maxn], match[maxn], mp[maxn][maxn];
    int find(int x) {
    	for (int i = 1; i<=n; ++i) 
    		if (!vis[i] && mp[x][i]) {
    			vis[i] = 1;
    			if (!match[i] || find(match[i])) {
    				match[i] = x; 
    				return 1;
    			}
    		}
    	return 0;
    }
    int main() {
    	while(~scanf("%d", &n)) {
    		for (int i = 1, num, t, num2; i<=n; ++i) {
    			scanf("%d: (%d)", &num, &t);
    			while(t--) {
    				scanf("%d", &num2); 
    				mp[num+1][num2+1] = 1;
    			}
    		}
    		int ans = 0;
    		for (int i = 1; i<=n; ++i) {
    			if (find(i)) ++ans;
    			zero(vis);
    		}
    		printf("%d
    ", n-ans/2);
    		zero(match); zero(mp);
    	}
        return 0;
    }
    
  • 相关阅读:
    MRO C3算法 super的运用
    约束 抛异常
    反射
    Ubuntu
    Vim
    Vim
    Arithmetic
    Docker-常用命令
    Docker
    Docker-LAMP开发环境
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/13532144.html
Copyright © 2011-2022 走看看