POJ 3692 Kindergarten (补图的最大独立集||匈牙利算法)

开关变换器分析:大信号模型与小信号模型 是电力电子系统建模中的两类基本方法,分别用于描述系统在不同工作条件下的动态行为。它们的核心区别在于是否对变量进行线性化近似,以及适用的分析场景。 阅读详情
Kindergarten
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 7291 Accepted: 3590

Description

In a kindergarten, there are a lot of kids. All girls of the kids know each other and all boys also know each other. In addition to that, some girls and boys know each other. Now the teachers want to pick some kids to play a game, which need that all players know each other. You are to help to find maximum number of kids the teacher can pick.

Input

The input consists of multiple test cases. Each test case starts with a line containing three integers
G, B (1 ≤ G, B ≤ 200) and M (0 ≤ M ≤ G × B), which is the number of girls, the number of boys and
the number of pairs of girl and boy who know each other, respectively.
Each of the following M lines contains two integers X and Y (1 ≤ X≤ G,1 ≤ Y ≤ B), which indicates that girl X and boy Y know each other.
The girls are numbered from 1 to G and the boys are numbered from 1 to B.

The last test case is followed by a line containing three zeros.

Output

For each test case, print a line containing the test case number( beginning with 1) followed by a integer which is the maximum number of kids the teacher can pick.

Sample Input

2 3 3
1 1
1 2
2 3
2 3 5
1 1
1 2
2 1
2 2
2 3
0 0 0

Sample Output

Case 1: 3
Case 2: 4

Source


POINT:

女生为图的左部分,男生为右部分。他们都各自认识(即各自连了线)。

男女分别认识的也各自连线。问你可以选出几个人来,他们各自都互相认识。

也就是求最大点集,每个点都和其他点有线连着。

构造图的补图,这样互相没线的就代表认识。可构造一个二分图。

求这个二分图的最大独立集,也就是这个点集的点都没有线连。(也就是全部都互相认识)


可以用最大流,或者匈牙利算法。

dinic:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 444;
const int inf = 0x3f3f3f3f;
struct node
{
    int from,to,flow,cap;
    node(int u,int v,int f,int c):
    from(u),to(v),flow(f),cap(c){};
    
};
int s,t;
vector<int>G[maxn];
vector<node> len;
int cur[maxn],d[maxn],vis[maxn];
void add(int u,int v,int c)
{
    len.push_back(node(u,v,0,c));
    len.push_back(node(v,u,0,0));
    G[u].push_back(len.size()-2);
    G[v].push_back(len.size()-1);
}

bool bfs()
{
    memset(d,0,sizeof d);
    memset(vis,0,sizeof vis);
    queue<int> q;
    q.push(s);
    vis[s]=1,d[s]=0;
    while(!q.empty())
    {
        int u=q.front();q.pop();
        for(int i=0;i<G[u].size();i++)
        {
            node e=len[G[u][i]];
            if(e.cap>e.flow&&vis[e.to]==0)
            {
                d[e.to]=d[u]+1;
                vis[e.to]=1;
                q.push(e.to);
            }
        }
    }
    return vis[t];
}
int dfs(int u,int a)
{
    if(u==t||a==0) return a;
    int flow=0,f;
    for(int &i = cur[u];i<G[u].size();i++)
    {
        node &e=len[G[u][i]];
        if(d[e.to]-1==d[u]&&(f=dfs(e.to,min(a,e.cap-e.flow)))>0)
        {
            flow+=f;
            e.flow+=f;
            a-=f;
            len[G[u][i]^1].flow-=f;
        }
        if(a==0) break;
    }
    if(flow==0) d[u]=-1;
    return flow;
}
int maxflow()
{
    int ans=0;
    while(bfs())
    {
        memset(cur,0,sizeof cur);
        ans+=dfs(s,inf);
    }
    return ans;
}
int mp[maxn][maxn];
void init()
{
    memset(mp,0,sizeof mp);
    for(int i=0;i<maxn;i++) G[i].clear();
    len.clear();
}
int main()
{
    int g,b,m;
    int p=0;
    while(~scanf("%d %d %d",&g,&b,&m))
    {
        if(g==b&&b==m&&g==0) break;
        init();
        for(int i=1;i<=m;i++)
        {
            int u,v;scanf("%d %d",&u,&v);
            mp[u][v]=1;
        }
        for(int i=1;i<=g;i++)
        {
            for(int j=1;j<=b;j++)
            {
                if(mp[i][j]==0)
                {
                    add(i,j+g,inf);
                }
            }
        }
        s=0;t=b+g+1;
        for(int i=1;i<=g;i++) add(0,i,1);
        for(int i=1;i<=b;i++) add(i+g,t,1);
        printf("Case %d: ",++p);
        printf("%d\n",b+g-maxflow());
    }
    
}


匈牙利:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 444;
const int inf = 0x3f3f3f3f;
int mp[maxn][maxn];
int use[maxn],aim[maxn]; int g,b,m;
bool dfs(int now)
{
    for(int i=1;i<=b;i++)
    {
        if(use[i]==0&&mp[now][i]==0)
        {
            use[i]=1;
            if(aim[i]==0||dfs(aim[i]))
            {
                aim[i]=now;
                return true;
            }
        }
    }
    return false;
}
int main()
{
    int p=0;
    while(~scanf("%d %d %d",&g,&b,&m))
    {
        if(g==b&&b==m&&g==0) break;
        memset(mp,0,sizeof mp);
        memset(aim,0,sizeof aim);
        for(int i=1;i<=m;i++)
        {
            int u,v;scanf("%d %d",&u,&v);
            mp[u][v]=1;
        }
        int dui=0;
        for(int i=1;i<=g;i++)
        {
            memset(use,0,sizeof use);
            if(dfs(i)) dui++;
        }
        printf("Case %d: ",++p);
        printf("%d\n",g+b-dui);
        
    }
    
}




华为交换机密码策略配置避坑指南:明文/密文、长度、复杂度,一个命令就出错 本文详细解析华为交换机密码策略配置的关键要点,包括密码长度、复杂度及等保合规要求。通过实战案例揭示常见配置误区,如明文/密文密码格式差异、复杂度检查联动机制等,帮助网络工程师避免安全漏洞。特别针对等保二级和三级要求,提供可直接落地的安全加固方案。 阅读详情

相关推荐

保姆级教程:手把手教你用Jacquard V2数据集训练机器人抓取模型(附完整代码)

本文提供了一份详细的保姆级教程,手把手教你使用Jacquard V2数据集训练机器人抓取模型。从环境配置、数据准备到模型架构设计、训练优化和实际部署,全程解析并附完整代码,帮助开发者快速掌握视觉抓取技术。

weixin_29031057的博客 313

匹配算法之 匈牙利算法详解

匹配算法之 匈牙利算法详解

yohnyang的博客 1万+

【SPSS操作】Non-parametric ANCOVA (Quade‘s) in SPSS

在SPSS中执行Quade的非参数ANCOVA需要手动计算步骤,因为SPSS没有内置的菜单选项。以下是详细的操作指南。

weixin_43689393的博客 1277

Hdu 1068(匈牙利算法+最大独立集)

Hdu 1068 (1)思路: 用匈牙利算法求出最大匹配,然后求出最大独立集 = n - 最大匹配 = n - (最大匹配的点数)/2. (2)匈牙利算法: 匈牙利算法是用来求解最大匹配算法; 算法的基本思想是寻找图中的增广路径,从一个点开始下一个未匹配点,如果找到下一个未匹配点, 就说明找到了一条新的增广路径,将新的匹配边加入增广路径,然后将之前的匹配边与非匹配边取反, ...

积少成多,水滴石穿 323

保姆级教程:中科蓝讯Downloader配置详解,从软硬开关机到EQ调音一步到位

本文详细介绍了中科蓝讯Downloader的配置流程,从硬件初始化到音频调优的全方位指南。涵盖软硬开关机选择、电源管理、DAC校准、EQ调音等关键步骤,帮助开发者高效完成配置并避免常见问题。特别适合需要精确控制音频设备和电源管理的中科蓝讯芯片开发者。

weixin_33670786的博客 308

从零开始:Basler相机与pylon Viewer的工业视觉入门指南

本文详细介绍了Basler相机与pylon Viewer在工业视觉系统中的入门指南,涵盖硬件连接、软件安装、核心功能解析及实战案例。通过pylon Viewer的全面控制和参数调整功能,帮助新手快速掌握工业视觉检测技术,提升生产效率。

julia4scientist的博客 1133

POJ 3692 补图的最大独立集

题意 传送门 POJ 3692 题解 求两两之间互有关系的点集,用补集的思想可以转换为求补图的最大独立集,最终可以转化为最大二分匹配问题。 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <queue> #incl...

neweryyy的博客 259

基于FPGA低频方波测量-频率与占空比

基于FPGA低频方波测量-频率与占空比

DRAXY的博客 6732

[图论总结] 最大独立集(例题:Code Names)

[图论总结1]最大独立集的概念独立集匹配概念之间的关系及性质例题 最大独立集的概念 独立集 PICTURE:/home/ldu/.config/tencent-qq//AppData/file//sendpix0.jpg 来自oi-wiki 在上面的描述中,V是代表的点权,而E代表的是边权 独立集以及最大独立集均是点的集合 从字面意思来说,一张图的最大独立集就是独立集中大小最大的 如果说两个点之间是独立的那么说这两个点之间就没有边相连 匹配 PICTURE:/home/ldu/.config/tencen

PushyTao的博客 1万+

【雕爷学编程】MicroPython手册之 Teensy 4.1 实时时钟 (RTC)

在类的初始化函数中,定义了用于控制I2C总线的i2c对象和RTC模块的I2C地址。接着,使用该引脚初始化了一个Pin对象。它还提供了8个串口,3个SPI端口,3个I2C端口,2个I2S/TDM数字音频端口,3个CAN总线(其中一个支持CAN FD),以及一个SDIO(4位数据)原生SD卡端口12。2、内存:Teensy 4.1配备了1024 KB的RAM(其中512 KB是紧密耦合的),8 MB的Flash(其中64 KB用于恢复和EEPROM模拟),以及两个位置可以选择添加更多的QSPI内存芯片。

雕爷学编程 575

SAPGUI excel 导出时遇到的运行时错误:STRING_SIZE_TOO_LARGE

当报表导出需求远超单一 XLSX 文件的物理承载力时,与其在 SAPGUI 中硬拼 2 GB 限制,不如把分页、过滤、流式写入作为设计前提。掌握 ABAP2XLSX 或 CSV + Power Query 等工具链,既能满足审计合规,又能让应用服务器远离的噩梦。祝你在下一次导出海量数据时,既高效又优雅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 638

POJ1419 Graph Coloring------(最大独立集-----补图最大团)

题目链接: http://poj.org/problem?id=1419 Graph Coloring Time Limit:1000MS Memory Limit:10000K Total Submissions:6047 Accepted:2786 Special Judge Description You are to...

Source_Roc 464

OV9734 DATASHEET,完整规格书

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

POJ 3692 Kindergarten(最大匹配+匈牙利算法+补图思想)

In a kindergarten, there are a lot of kids. All girls of the kids know each other and all boys also know each other. In addition to that, some girls and boys know each other. Now the teachers want to pick some kids to play a game, which need that all playe

HJY 524

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

poj 3692 Kindergarten(二分图匹配,最大独立集)

Description In a kindergarten, there are a lot of kids. All girls of the kids know each other and all boys also know each other. In addition to that, some girls and boys know each other....

bandiaodai5734的博客 151

STM32F407中文手册

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

Poj_3692 Kindergarten -二分图的最大团

题目:在二分图中找出最大的完全二分图 定理:二分图的最大团=其补图的最大独立集 /************************************************ Author :DarkTong Created Time :2016/7/31 15:17:40 File Name :Poj_3296.cpp *...

bannesi6888的博客 144

poj 3692 Kindergarten 二分图 最大独立集

poj 3692 Kindergarten http://poj.org/problem?id=3692   挑选最多的互相认识的小朋友   补图的最大独立集   #include #include #include #include #include using namespace std; int g, b, k, a[403][403], match[4

倩 394

POJ 3692 Kindergarten

bool find(int x){ int i,j; for (j=1;j<=m;j++){ //扫描每个被匹配的物体 if (line[x][j]==true && used[j]==false) //如果有联系并且还没有标记过(这里标记的意思是这次查找曾试图改变过该物体的归属问题,但是没有成功,所以就不用瞎费工夫了)

Wildcatastrophe的博客 346

POJ3692 Kindergarten —— 二分图最大团

题目链接:http://poj.org/problem?id=3692 Kindergarten Time Limit:2000MS Memory Limit:65536K Total Submissions:7371 Accepted:3636 Description In a kindergarten...

alince20008的博客 168

POJ3692 HDU2458 Kindergarten

一开始一点思路都没有,后来看了这个解题报告才知道怎么,学习了,解题报告请猛击这里。 /******************************************************************************* # Author : Neo Fung # Email : neosfung@gmail.com # Last modified: 201

Neo Fung的专栏 1337

poj 3692 Kindergarten

<br />啊。。这次终于挑相互认识的小盆友出去玩咧。。呵呵。。<br /> <br />女生之间都相互认识,男生之间也是。给你男女认识对数,求出最大数量的小盆友相互都认识。。。<br /> <br />类似于之前那几道,建图,只不过这次匈牙利算法算的是未标记的图,在讨论里见这个叫补图。。。<br /> <br />开始一直不对因为,这个矩阵不是N*N的,因为我的初始化全是0,而最后判断的也是0的点才。。。所以界限需要严格定一下。。。<br /> <br />最后就用总人数减去不认识的最少人数(最小顶点覆盖

小媛在努力~ 1425

POJ 3692 Kindergarten 最大团->最大独立集

题意:在幼儿园中,男孩们相互

leodestiny 593

poj 3692 Kindergarten 二分匹配

题目链接:poj 3692         给定

飞火扑蛾的专栏 465

poj3692_Kindergarten

poj3692_Kindergarten 这题目大意是:男孩互相认识,女孩互相认识,一部分男女之间认识,老师要选一部分人,要求这部分人必须都相互认识。 这是一个二部图,先求出补图,在补图中G‘左右两点有连线说明在G中两者不认识,反之成立。 所以就是在补图中怎样来构造左右两部分间互相之间没有连线的图。============&gt...

weixin_30698297的博客 100

POJ 3692 Kindergarten (二分图 最大团)

POJ 3692 Kindergarten (二分图 最大团)

Tc的专栏 1800

POJ-3692Kindergarten,求最大独立集!

Kindergarten Time Limit: 2000MS   Memory Limit: 65536K       Description In a kindergarten, there are a lot of kids. All girls of the kids know each other and all boys

NYIST_TC_LYQ的博客 588
上一篇: HDU 1569 方格取数(2) (二分图的最大点权独立集)
下一篇: HDU 4825 Xor Sum(01字典树+异或)
Mr_Treeeee
博客等级 码龄10年 38粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值