hdu 2768 二分图匹配(难想到)

持续集成介绍及Jenkins自动化测试部署 学习持续集成及jenkins的自动化测试部署 阅读详情
题意:有v个观众,每个人投给自己喜欢的猫(或者狗)和讨厌的狗(或者猫),如果出现喜欢的和别人讨厌的相同,则其中一人会不满意。 
现要求得是最大满意的观众是多少。 

方法:根据出现矛盾的两个观众序号建边。现在选择最多的顶点,要求各个顶点之间没有线相连,即不出现矛盾。就是求最大独立集。

 最大匹配:二分图G中,找出边数最大的子图M,使得M中各条边均无公共顶点,则M为最大匹配。可用匈牙利算法求得。 
 最小顶点覆盖:二分图G中,找出顶点数最少的子图M,使得M中所有的点可以覆盖G中所有的边(一个顶点可以覆盖与它相连的边)。 
 最小顶点覆盖=最大匹配 

#include <bits/stdc++.h>  
using namespace std;  
vector<int> line[503];  
bool used[503];  
int girl[503];  
int n,m,k;
bool find(int x){  
    for (int j=0;j<line[x].size();j++){     
        int jj=line[x][j];  
        if (used[jj]==false){  
            used[jj]=1;  
            if (girl[jj]==-1 || find(girl[jj])) {   
                girl[jj]=x;  
                return true;}}}  
    return false;
}  
string a[503],b[503];
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
    	cin>>k>>m>>n;
        int all=0;  
        for(int i=0;i<n;++i)  
            line[i].clear();  
        memset(girl,-1,sizeof(girl));  
        for(int i=0;i<n;++i){
            cin>>a[i]>>b[i];
            for(int j=0;j<i;++j){
                if(a[i]==b[j]||b[i]==a[j]){
                    line[i].push_back(j);
                    line[j].push_back(i);
                }
            }
        }
        for (int i=0;i<n;i++){  
            memset(used,0,sizeof(used));     
            if (find(i))   
                  all+=1;  
        }  
        cout<<n-all/2<<endl;  //最小顶点覆盖,除2是因为两边有所重复 
    }
    return 0;
}
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct node{
    int cat,dog;
}p1[505],p2[505];
int c,d,v,num1,num2;
int s[505][505],vis[505],match[505];
int dfs(int x){
    int i,j;
    for(i=1;i<num2;i++){
        if(!vis[i]&&s[x][i]){
            vis[i]=1;
            if(!match[i]||dfs(match[i])){
                match[i]=x;
                return 1;
            }
        }
    }
    return 0;
}
int hungarian(){
    int i,sum;
    sum=0;
    for(i=1;i<num1;i++){
        memset(vis,0,sizeof(vis));
        if(dfs(i))
        sum++;
    }
    return sum;
}                                       //匈牙利算法模板
int main(){                             //将喜欢猫的人放在左边的集合里喜欢狗的放在右面
    int i,j,t,a,b;                      //将产生矛盾的连在一起再用v减掉,因此用到二分图
    char ch;                            //匹配也就是匈牙利算法
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d",&c,&d,&v);
        num1=num2=1;
        for(i=1;i<=v;i++){
            scanf(" %c%d %c%d",&ch,&a,&ch,&b);
            if(ch=='D'){                //喜欢猫的
                p1[num1].cat=a;
                p1[num1++].dog=b;
            }
            else{                       //喜欢狗的
                p2[num2].cat=b;
                p2[num2++].dog=a;
            }
        }
        memset(s,0,sizeof(s));
        memset(match,0,sizeof(match));
        for(i=1;i<num1;i++)
        for(j=1;j<num2;j++)
        if(p1[i].cat==p2[j].cat||p1[i].dog==p2[j].dog)
        s[i][j]=1;
        printf("%d\n",v-hungarian());
    }
    return 0;
}


OV9734 DATASHEET,完整规格书 OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等 立即下载

相关推荐

STM32外部中断与事件机制深度解析:从硬件触发到软件响应

本文深入解析STM32外部中断与事件机制,从硬件触发到软件响应的完整流程。通过对比中断和事件的应用场景、响应速度及配置方法,帮助开发者优化嵌入式系统设计,特别适合需要低功耗或高实时性的项目。

weixin_29175469的博客 408

HDU 2768

题意:给你n条狗m条猫,k个投票人;每个投票人对猫和狗投讨厌和喜欢的票,求满足最多人的数。。。 对矛盾的投票人建双向边,最后答案就是k-最大匹配数/2(只能满足其中一个人); #include #include #include #include #include #include #include #include #include #include using name

不吸血的Vampire 680

FI 应计对象的创建和摊销

创建/修改:ACACTREE01/ACACTREE02 应计对象的过账:ACACPOSTING

nancyln9711的博客 903

hdu2768 最大独立集

有人喜欢猫,却不喜欢狗,而某些人恰好相反。所以把喜欢猫和讨厌猫,当两个集合矛盾则当做边连起来,最后最大独立集=顶点数-最大匹配数。 #include #include #include #include #include #include using namespace std; #define N 510 struct node { char a[5],b[5]; }c[N],d

无奈滴微笑 907

技术文档的语言表达:简洁、准确与易懂的平衡艺术

技术文档的语言表达不仅要简洁、准确,还需要能够打破技术壁垒,使不同背景的读者都能理解。这是一项需要技巧和经验的工作,它要求技术作者既要具备扎实的专业知识,又要具备清晰的表达能力。通过不断打磨语言的简洁性、准确性和易懂性,我们能够创造出一份高质量的技术文档,让知识的传递不再受限于语言的障碍。

人心有反复,好在山水有重逢。 4677

Synopsys SpyGlass 进行 RTL 功耗估计

通过上述脚本,您可以使用 Synopsys SpyGlass 对纯 RTL 代码和带有 FSDB 波形的 RTL 代码进行功耗估计,并支持将 SDC 文件转换为 SGDC 文件。

yumingqinglong的博客 2186

图论 —— 二分图

【概述】 二分图又称作偶图,是图论中的一种特殊模型。 设 G=(V,E) 是一无向图,若顶点 V 可分割为两个互不相交的子集 (A,B),且图中的每条边(i,j)所关联的两个顶点 i 和 j 分属这两个不同的顶点集 (i ∈A,j ∈B),则称图 G 为一二分图。 其充要条件是:图 G 中至少存在两个点,且图中所有回路的长度均为偶数。 简单来说,就是顶点集 V 可分割为两个互不相交的子...

Alex_McAvoy的博客 2万+

信息传输仿真:卫星通信系统仿真_(12).基于SystemVue的卫星通信仿真

SystemVue是Cadence公司开发的一款用于系统级设计和仿真的软件工具。它主要用于无线通信系统的设计和验证,特别是在卫星通信、雷达、射频和微波通信等领域。SystemVue提供了一个集成的环境,用户可以通过拖拽和连接各种预定义的模块来构建复杂的通信系统模型,从而进行性能分析和优化。

2401_87715305的博客 1370

HDU 2768 Cat vs. Dog 【二分匹配之最大独立集】

最大独立集=顶点数n-最大匹配 图论的题目,关键还是建图! 题意:有v个观众,每个人投给自己喜欢的猫(或者狗)和讨厌的狗(或者猫),如果出现喜欢的和别人讨厌的相同,则其中一人会不满意。 现要求得是最大满意的观众是多少。 方法:根据出现矛盾的两个观众序号建边。现在选择最多的顶点,要求各个顶点之间没有线相连,即不出现矛盾。就是求最大独立集。 最大匹配:二分图G中,找出边数最大的子图M,使得M中各条边均无公共顶点,则M为最大匹配。可用匈牙利算法求得。 最大独立集,在二分图G中,找

AC_Dreameng 934

京东/淘宝商品评论情感分析:基于Python的大规模评论爬取与NLP情感分析实战

在当今电商蓬勃发展的时代,用户评论已成为影响消费者购买决策的关键因素。本文将详细介绍如何使用Python最新技术栈爬取京东和淘宝商品评论,并运用先进的自然语言处理技术对评论进行情感分析,识别用户的好评与差评倾向。通过完整的代码实现和深入的技术解析,帮助读者掌握从数据采集到情感分析的全流程。本文详细介绍了如何使用Python最新技术栈实现京东和淘宝商品评论的爬取与情感分析。通过结合异步爬虫、反爬策略、BERT情感分析等先进技术,我们构建了一个完整的评论分析系统。高效爬取。

2201_76125261的博客 1402

GB28181 —— 3、C++编写GB28181设备端,完成注册、注销、保活心跳、响应查询目录等功能(附源码)

GB28181 —— Win10下编写GB28181设备端,完成注册、注销、保活心跳、响应查询目录等功能(附源码)

1308

解题报告 (九) 二分图最大匹配

二分图最大匹配题集-全网最全

英雄哪里出来 8万+

【ArcGIS】07 ArcHydroTools对COM组件的调用返回了错误

在用Arc Hydro Tools提取流域时,在DEM Reconditioning时可能会遇到这个问题: 经过摸索,发现了问题产生的原因: 结果文件保存在了有中文的路径中。 解决的办法: 首先,把ArcGIS切换成英文版 搜索ArcGlS Administrator,以管理员方式打开 点击高级,选择语言为English 其次,新建mxd文档 删除原来的mxd文档,新建mxd文档,放置原来的图层文件。如果不这样做,最后一步的Map Name还会是“图层”这两个汉字。 最后,设置Arc Hydro T

记录专业模型开发、算法程序设计、软件学习笔记、生活日志。 4918

HDU_Steps6.3 二分图 HDU1054 HDU1068 HDU1150 HDU1151 HDU1498 HDU1528 HDU1507 HDU2768

6.3.1  HDU1054 Strategic Game 给出一颗树,如果一个点被覆盖,则与他相连的边都被覆盖,求最少需要多少个点来覆盖这颗树,二分图和树形DP都可以解决,DP会更快一些 DP算法,对于每个点可以选择放或者不放,令all[v]表示覆盖以v为父节点的子树所需要的最小卫兵数,dr[v]表示这一点放卫兵覆盖子树的最小卫兵数,显然对于某一点,若这一点不放,则它的儿子节点都要放sum1

飞熊入梦 1535

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

hdu2768 Cat vs. Dog【最大独立集】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2768 题意:有c只猫,d只狗,有n条意见,每条意见表面保留哪只宠物,丢到哪只宠物,问你最多满足几个人的意见 解析:可以把保留猫的看成一群人,保留狗的看成一群人,这样就构成了一个二分图,然后保留猫和保留狗的人出现分歧就连一条边,问你最多满足几个意见,也就相当于求这个二分图的最大独立集,最大独立集+最小

22h's Blog 527

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

hdu 2768 二分图匹配

这题考的貌似是建边; 如果俩人喜欢和讨厌有冲突那么俩人之间建边; 跑二分图匹配求最大匹配; 再用总人数一减就是结果; #include using namespace std; struct qq { int u,next; }g[505]; int top; int head[505],f[505],book[505]; int map1[505][505]; void add(

last_xuanshen的博客 246

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

hdu2768

链接:点击打开链接 题意:t组数据,c只猫,d只狗,v个人,v行每行有两个单词,单词的首字母代表动物的种类,第一个单词代表喜欢第二个代表不喜欢,问最大能满足多少个人,具体看样例,第一组数据C1 D1||D1 C1第一个人喜欢Cat1不喜欢Dog1,第二个人喜欢Dog1不喜欢#include #include #include #include using namespace std; s

stay_accept的专栏 1348

HDU2768 - Cat vs. Dog

最大独立点集 最大匹配:二分图G中,找出边数最大的子图M,使得M中各条边均无公共顶点,则M为最大匹配。可用匈牙利算法求得。  最大独立集:在二分图G中,找出点数最多的子图M,使得M中各点之间都不相连。  最大独立集 = 顶点数 - 最大匹配

362

HDU2768二分图求最大独立集

/************************************************************* 题意: 给你n只猫,m只狗,p个人; 每个人都有一只喜欢的和一只讨厌的动物; 如果去掉某人讨厌的并且留下他喜欢的, 则这人是高兴的,让你求出最多高兴人数。 算法: 利用二分匹配求最大独立集 最大独立集=节点数-最大匹配数 建图: 喜欢猫的人左边,喜欢狗的人右边 二分图初始化

始往流离,终彼成章。 1209

【一堆二分图】

HDU 1054:无向图最小顶点覆盖,maxmatch/2

willinglive 937

HDU 2768. Cat vs. Dog

链接 http://acm.hdu.edu.cn/showproblem.php?pid=2768 题意 n个观众,每个观众都是一个爱猫的人(即讨厌狗)或一个爱狗的人(即一个讨厌猫) 每个观众可以投票决定两件事:一只宠物保留,一只宠物扔掉 挑选留下来的宠物,以便最大限度地满足观众 思路 将每个观众和与其矛盾的观众连线,求二分图最大独立集 代码 #include <bits/stdc++.h> #define SZ(x) (int)(x).size() #define ALL(x) (x).beg

c4Lnn 的 优快云 博客 272

HDU2768-二分图最大独立集

Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2113    Accepted Submission(s): 817 Problem Description The latest real

Code-Dreamer的博客 699

HDU 2768Cat vs. Dog二分图 最大独立集(最大匹配)

今天做的二分图唯一一个比较难的 而且看了题解才发现,又理解错题意了。是说 如果出现喜欢的和别人讨厌的相同,则其中一人会不满意。问最多满意多少人 即把喜欢喝讨厌彼此矛盾的建边,个数-最大匹配即为所求 Description The latest reality show has hit the TV: ``Cat vs. Dog''. In this show, a bunch

MissZhou要努力 823

hdu 2768 (二分匹配,最大独立集)

求最大留下的观众,观众之间存在不能同时满足的关系,就是矛盾关系, 矛盾关系建边,建边是双向的所以最大匹配要/2 还有一种建图的方法:把观众分成两个集合,一个是投留下猫的,一个是投留下狗的 每个集合间没有矛盾关系,就是二分图了,求出最大匹配, 两种方法都是要求最大独立集 #include #include #define N 510 int map[

菜鸟起航的专栏 839

hdu 2768

二分图 View Code #include<iostream>#include<queue>#include<vector>#include<cstring>#include<string>#include<cstdio>#define maxn 501using namespace std;int match[m...

weixin_34061482的博客 94

hdu 2768 Cat vs. Dog (最大独立集)

/* 题意:有v个观众,每个人投给自己喜欢的猫(或者狗)和讨厌的狗(或者猫),如果出现喜欢的和别人讨厌的相同,则其中一人会不满意。 现要求得是最大满意的观众是多少。 方法:根据出现矛盾的两个观众序号建边。现在选择最多的顶点,要求各个顶点之间没有线相连,即不出现矛盾。就是求最大独立集。 最大匹配:二分图G中,找出边数最大的子图M,使得M中各条边均无公共顶点,则M为最大匹配。

苍竹林 506
上一篇: hdu5489(删除一段后的最长上升子序列长度)LIS
下一篇: zoj3826 DFS
ccyy-
博客等级 码龄12年 31粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值