zoukankan      html  css  js  c++  java
  • POJ2771最大独立集元素个数

    题意:
          女生和男生之间只要满足四个条件中的一个,那么两个人就不会在一起!然后给出一些男生和女生,问最多多少人一起做活动彼此不会产生暧昧关系。


    思路:
          这样的问题还是比较裸的问法,就是再问最大独立集元素个数,左边是男,右边是女,建立二分图,然后可能暧昧的连接在一起,最后n-最大匹配数,就行了,还有就是很多人都不是很理解这个结论为什么是对的,我说下我的简单理解,我们可以这样想,分成两个集合,这两个集合之间的最大暧昧关系我们只要删除产生暧昧关系的两个人其中的一个(这个不是随意删除谁,要看当时情况,但是肯定可以删除其中一个人)这样最后剩下的就没有办法在组成暧昧关系了,如果还不理解想想二分匹配匈牙利算法的过程,匹配完之后剩下的已经没有办法在匹配了,那么剩下的肯定是独立的,然后在在匹配里面选择一半拿出来(不是随意现则),可以有方法做到剩下的一半与之前匹配剩下的都是独立的,这样答案就是n-匹配数.


    #include<stdio.h>
    #include<string.h>


    #define N_node 500 + 50
    #define N_edge 500 * 500 + 50


    typedef struct
    {
        int a;
        char b[5];
        char c[105];
        char d[105];
    }NODE;


    typedef struct
    {
        int to ,next;
    }STAR;


    NODE node[N_node];
    STAR E[N_edge];
    int list[N_node] ,tot;
    int mkdfs[N_node] ,mkgx[N_node];


    void add(int a ,int b)
    {
        E[++tot].to = b;
        E[tot].next = list[a];
        list[a] = tot;
    }


    int DFS_XYL(int x)
    {
        for(int k = list[x] ;k ;k = E[k].next)
        {
            int to = E[k].to;
            if(mkdfs[to]) continue;
            mkdfs[to] = 1;
            if(mkgx[to] == -1 || DFS_XYL(mkgx[to]))
            {
                mkgx[to] = x;
                return 1;
            }
        }
        return 0;
    }


    int abss(int x)
    {
        return x > 0 ? x : -x;
    }


    int main ()
    {
        int i ,j ,t ,n;
        scanf("%d" ,&t);
        while(t--)
        {
            scanf("%d" ,&n);
            for(i = 1 ;i <= n ;i ++)
            scanf("%d %s %s %s" ,&node[i].a ,node[i].b ,node[i].c ,node[i].d);
            memset(list ,0 ,sizeof(list));
            tot = 1;
            for(i = 1 ;i <= n ;i ++)
            {
                if(node[i].b[0] != 'M') continue;
                for(j = 1 ;j <= n ;j ++)
                {
                    if(node[j].b[0] == 'M') continue;
                    if(abss(node[i].a - node[j].a) > 40) continue;
                    if(strcmp(node[i].c ,node[j].c)) continue;
                    if(!strcmp(node[i].d ,node[j].d)) continue;
                    add(i ,j);
                }
            }
            memset(mkgx ,255 ,sizeof(mkgx));
            int ans = 0;
            for(i = 1 ;i <= n ;i ++)
            {
                memset(mkdfs ,0 ,sizeof(mkdfs));
                ans += DFS_XYL(i);
            }
            printf("%d " ,n - ans);
        }
        return 0;
    }



  • 相关阅读:
    nodejs 单元测试框架api文档
    Pytest官方教程-22-API参考-Hooks
    【pytest】Hook 方法之 pytest_addoption :注册命令行参数
    k8s架构
    k8s 组件介绍-API Server API Server简介
    SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可灰度)
    Elasticsearch 常见的 8 种错误及最佳实践
    Istio路由配置
    监控系统选型,这篇不可不读!
    logstash实现日志文件同步到elasticsearch深入详解
  • 原文地址:https://www.cnblogs.com/csnd/p/12062495.html
Copyright © 2011-2022 走看看