zoukankan      html  css  js  c++  java
  • HDU 3829 Cat VS Dog (最大独立集)【二分图匹配】

    <题目链接>

    题目大意:

    动物园有n条狗。m头猫。p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物。如今动物园要转移一些动物。假设一个小孩喜欢的动物在,不喜欢的动物不在,他就会happy。问动物最多能使几个小孩happy。

    解题分析:

    因为本题不同的小孩之间喜好可能会产生冲突,所以,要使最多的小孩满意,不妨将这些冲突的小孩之间相互连线,然后求出不产生冲突的最大点集,于是本题就转化为了最大独立集问题。最大独立集=总点数-最大匹配数。

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <algorithm>
     4 #include <string>
     5 #include <cstring>
     6 #include <vector>
     7 using namespace std;
     8 
     9 const int M=1505;
    10 int match[M];
    11 bool vis[M];
    12 vector<int>map[M];
    13 string lk[M],dislk[M];
    14 int n,m,p,uN;
    15 bool dfs(int u){
    16     for(int i=0;i<map[u].size();i++){
    17         if(!vis[map[u][i]]){
    18             vis[map[u][i]]=true;
    19             if(match[map[u][i]]==-1||dfs(match[map[u][i]])){
    20                 match[map[u][i]]=u;
    21                 return true;
    22             }
    23         }
    24     }
    25     return false;
    26 }
    27 int hungary(){
    28     int res=0;
    29     memset(match,-1,sizeof(match));
    30     for(int u=0;u<p;u++){
    31         memset(vis,false,sizeof(vis));
    32         res+=dfs(u);
    33     }
    34     return res;
    35 }
    36 int main(){
    37     while(scanf("%d%d%d",&n,&m,&p)!=EOF){
    38         for(int i=0;i<M;i++)map[i].clear();
    39         for(int i=0;i<p;i++){
    40             cin>>lk[i]>>dislk[i];
    41         }
    42         for(int i=0;i<p;i++)
    43           for(int j=i+1;j<p;j++)
    44             if(lk[i]==dislk[j]||dislk[i]==lk[j]){  //产生矛盾的人之间建立无向边
    45                 map[i].push_back(j);
    46                 map[j].push_back(i);
    47             }
    48         printf("%d
    ",p-hungary()/2);    //最大独立集=总点数-最大匹配
    49     }
    50     return 0;
    51 }

    2018-11-16

  • 相关阅读:
    如何加快github下载代码的速度
    还原 对于 服务器“ZHULIN-DB-DEV”失败。 (Microsoft.SqlServer.SmoExtended)
    sqlserver 常用语句
    sql 中 rank() over,dense_rank(),row_number() 的区别
    sqlserver 算两个日期间的月份数
    理解http的幂等性
    学习的第一推动力(很好)
    clean-room 洁净室软件工程
    如何组建测试团队
    vscode go 调试 launch.json
  • 原文地址:https://www.cnblogs.com/00isok/p/9972310.html
Copyright © 2011-2022 走看看