zoukankan      html  css  js  c++  java
  • hdu1068 Girls and Boys --- 最大独立集

    有一个集合男和一个集合女,给出两集合间一些一一相应关系。问该两集合中的最大独立集的点数。

    最大独立集=顶点总数-最大匹配数

    此题中。若(a,b)有关。则(b,a)有关。每个关系算了两次,相当于二分图的两边集合没有分男女。两边都是总人数。

    所以此题中答案应该是 顶点总数-最大匹配数/2


    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<vector>
    #include<queue>
    const int maxn=510;
    using namespace std;
    
    int mx[maxn],my[maxn],vis[maxn],e[maxn][maxn],n;
    
    int path(int i)
    {
        int j;
        for(j=0;j<n;j++)
        {
            if(e[i][j]&&!vis[j])
            {
                vis[j]=1;
                if(my[j]==-1||path(my[j]))
                {
                    my[j]=i;
                    mx[i]=j;
                    return 1;
                }
            }
        }
        return 0;
    }
    
    int hungry()
    {
        int res=0;
        memset(mx,-1,sizeof mx);
        memset(my,-1,sizeof my);
        for(int i=0;i<n;i++)
        {
            if(mx[i]==-1)
            {
                memset(vis,0,sizeof vis);
                res+=path(i);
            }
        }
        return res;
    }
    
    int main()
    {
        int a,b,m,i;
        while(~scanf("%d",&n))
        {
            memset(e,0,sizeof e);
            for(i=0;i<n;i++)
            {
                scanf("%d: (%d)",&a,&m);
                while(m--)
                {
                    scanf("%d",&b);
                    e[a][b]=1;
                }
            }
            printf("%d
    ",n-hungry()/2);
        }
        return 0;
    }
    


  • 相关阅读:
    Oracle性能调整ASH,AWR,ADDM
    子网掩码、子网划分详解
    10046事件sql_trace跟踪
    find详解
    date详解
    touch详解
    [转]lsof详解
    iftop、ifstat详解
    iotop详解
    关于Unity的入门游戏飞机大战的开发(上)
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6882218.html
Copyright © 2011-2022 走看看