特殊三分图匹配

2023-05-16

特殊三分图匹配

@LOJ

一般三分图的匹配需要运用基于拉格朗日松弛的分支定界法,并运用启发式算法得到较优的初始下界。已被证明是NPC问题。出题者在此说明一般三分图的匹配可以解决本题。
【题目描述】
三个点集X,Y,Z,同一点集之间没有边,XZ点集之间没有边。
XY点集之间有边,YZ点集之间有边。
求三分图的最大匹配。三分图匹配是指有不相交的若干个点集,{i,j,k(i∈X,j∈Y,k∈Z)}
【输入格式】
第1行n1,n2,n3,m1,m2(1<=n1,n2,n3<=1000)(1<=m1,m2<=5000)
分别表示XYZ点集的点数,XY之间的边数,YZ之间的边数。
然后m1行,一行两个整数a,b,表示xa和yb之间有边。
然后m2行,一行两个整数a,b,表示ya和zb之间有边。
【输出格式】
一行一个整数,三分图的最大匹配数。

【样例输入1】
3 4 5 6 6
1 1
1 3
2 2
2 4
3 1
3 3
1 2
2 1
2 3
3 2
4 4
4 5
【样例输出1】
2
【样例输入2】
3 3 3 5 4
1 2
2 3
2 2
1 3
3 1
1 2
3 3
3 2
2 1
【样例输出2】
3

【注意】
输入可能存在重边。
对于100%的数据,(1<=n1,n2,n3<=1000)(1<=m1,m2<=5000)



对没错,这毒瘤题就是我出的。本题添加至LOJ6345。

鸣谢LOJdalao hack 标程

鸣谢LOJdalao 提供正解


把Y点集拆成2个点,两点之间连一条流量上限为1的流,其他边流量上限为1,添加源点和汇点,做最大流即可。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int maxn=5000;
const int oo=1000000000;

int n1,n2,n3,m1,m2;

struct Edge{
    int from,to,cap,flow;
};
vector<int>G[maxn];
vector<Edge>edges;
void Addedge(int x,int y,int z){
    Edge e;
    e.from=x;e.to=y;e.cap=z;e.flow=0;
    edges.push_back(e);
    e.from=y;e.to=x;e.cap=0;e.flow=0;
    edges.push_back(e);
    int c=edges.size();
    G[x].push_back(c-2);
    G[y].push_back(c-1);
}

int s,t;
int vis[maxn];
int d[maxn];
queue<int>q;
int Bfs(){
    memset(vis,0,sizeof(vis));
    d[s]=0;vis[s]=1;q.push(s);
    while(!q.empty()){
        int x=q.front();q.pop();
        for(int i=0;i<G[x].size();++i){
            Edge e=edges[G[x][i]];
            if((!vis[e.to])&&(e.cap>e.flow)){
                d[e.to]=d[x]+1;
                vis[e.to]=1;
                q.push(e.to);
            }
        }
    }
    return vis[t];
}

int Dfs(int x,int a){
    if((x==t)||(a==0))return a;

    int nowflow=0,f=0;
    for(int i=0;i<G[x].size();++i){
        Edge e=edges[G[x][i]];
        if((d[x]+1==d[e.to])&&((f=Dfs(e.to,min(a,e.cap-e.flow)))>0)){
            nowflow+=f;a-=f;
            edges[G[x][i]].flow+=f;
            edges[G[x][i]^1].flow-=f;
            if(a==0)break;
        }
    }
    return nowflow;
}

int Maxflow(){
    int flow=0;
    while(Bfs())flow+=Dfs(s,oo);
    return flow;
}


int main(){
    scanf("%d%d%d%d%d",&n1,&n2,&n3,&m1,&m2);

    s=n1+n2+n2+n3+1;t=s+1;
    for(int i=1;i<=n1;++i)Addedge(s,i,1);
    for(int i=1;i<=n3;++i)Addedge(n1+n2+n2+i,t,1);
    for(int i=1;i<=n2;++i)Addedge(n1+i,n1+n2+i,1);
    while(m1--){
        int x,y;
        scanf("%d%d",&x,&y);
        Addedge(x,n1+y,1);
    }
    while(m2--){
        int x,y;
        scanf("%d%d",&x,&y);
        Addedge(n1+n2+x,n1+n2+n2+y,1);
    }

    printf("%d\n",Maxflow());
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

特殊三分图匹配 的相关文章

  • VNCserver 配置 gnome 桌面

    HOWTO Linux VNCserver By Erik Rodriguez This article is a HOWTO for running VNCserver on Linux These examples are specif
  • 附加!-关于安装R4.0.0-详细步骤

    附加博客 关于安装R 详细步骤 在我下载完毕之后 xff0c 发现对于第一次安装的 小白 来说可能还是有一点儿彷徨 xff0c 所以下面的步骤就以图的形式来走一遍 xff1a 第一步 xff1a 下载得到下图 xff1a xff08 R 4
  • 【牛客网 - 华为机试 - HJ5 进制转换】

    描述 写出一个程序 xff0c 接受一个十六进制的数 xff0c 输出该数值的十进制表示 数据范围 xff1a 保证结果在 输入描述 xff1a 输入一个十六进制的数值字符串 输出描述 xff1a 输出该数值的十进制字符串 不同组的测试用例
  • Java JDK11的下载与安装

    前言 本篇文章是基于win10系统下载安装JDK11的教程 1 下载Oracle JDK 进入Oracle 官网 xff1a https www oracle com java technologies downloads java11 选
  • 电脑怎样删除警告“操作无法完成“的文件夹

    问题概述 虽然系统这样的提示了 xff0c 但是我们查看一下桌面没有看到任何正在运行的程序啊 xff0c 这是怎么了 xff0c 是不是系统出错了 其实不是系统出错了 xff0c 只是有的应用程序在后台运行 xff0c 我们根本看不到 xf
  • 使用python解决三门问题(Monty Hall Problem)实验

    问题描述 奖品随机分布在3扇门后 xff0c 客户随机选择其中一扇 xff0c 主持人打开另外两扇中任意没有奖品的一扇 xff0c 问客户选择以下哪种策略赢面更大 xff1a 1 坚持原来的选择 2 改选剩下的那扇未打开的门 问题分析 1
  • 75个顶级开源安全应用

    本文转载自 xff1a http www iii soft com forum php mod 61 viewthread amp tid 61 1513 随着网络犯罪的日益增多 xff0c 或许我们需要更多资金投入到安全方面 不过 xff
  • IntelliJ IDEA 常用设置大全

    对IDEA的配置进行优化 xff0c 目的是为了个性化定制提高编码效率 以下为个人通过自己平时积累及网络上分享技巧进行总结 文章标题有点多 xff0c 可通过目录进行快速跳转 基本以下的配置就足以在工作中提高效率 xff0c 按步配置完成后
  • Windows 安装并配置 MySQL 5.6

    1 xff0c 下载 MySQL 压缩包 1 1 xff0c 打开 https www mysql com xff0c 进入 MySQL 的官方网站 xff0c 点击 Downloads xff0c 进入 下载中心 1 2 xff0c 在
  • Git 常用命令记录

    文章目录 安装卸载配置管理不常见的使用场景Idea更新项目失败忽略文件的权限变化配置自动换行创建SSH密钥多账号ssh配置免密码登录远程服务器https协议下提交代码免密码文件推向3个git库修改远程仓库地址撤销远程记录放弃本地的文件修改最
  • Docker 学习笔记 | 常用命令

    文章目录 什么是 DockerDocker 理念能做什么Docker 基本组成 Linux 中安装CentOS 6 8 安装 DockerCentOS 7 安装 DockerDocker 中国官方镜像加速使用 registry mirror
  • Debain查看端口占用开放端口

    查看指定端口服务 查看3002被哪些服务占用 xff1a sudo lsof i 3002 关闭指定服务 xff1a kill PID 端口开放 编辑文件 xff1a vi etc nftables conf 修改内容如下 usr sbin
  • pm2命令使用

    文章目录 常用命令示例 常用命令 启动应用程序 pm2 start lt app name gt 停止应用程序 pm2 stop lt app name gt 重启应用程序 pm2 restart lt app name gt 删除应用程序
  • Markdown入门指南

    导语 一 认识Markdown 使用Markdown的优点 二 Markdown 语法 标题列表 嵌套列表 引用图片与链接 自动链接 粗体与斜体表格代码框 其它 分割线索引超链注释 转义字符段落缩进 空格 字体 字号 颜色 导语 Markd
  • Markdown进阶语法

    文章目录 markdown进阶语法内容目录加强代码块脚注流程图时序图LaTeX公式 markdown进阶语法 内容目录 使用 TOC 引用目录 xff0c 将 TOC 放至文本的首行 xff0c 编辑器将自动生成目录 有一些编辑器不支持 T
  • Maven 变量及常见插件配置详解

    一 变量 自定义变量及内置变量 1 自定义变量2 内置变量 二 常见插件配置 1 编译插件2 设置资源文件的编码方式3 自动拷贝 jar 包到 target 目录4 生成源代码 jar 包5 将项目打成 jar 包 assembly xml
  • Dos命令讲解

    一 什么是DOS二 启动DOS的多种方法 三 DOS的内部命令与外部命令四 系统环境变量讲解 增加Path环境变量路径常见的系统环境变量 五 常用的运行命令六 DOS使用技巧 设置CMD的默认路径设置CMD的字体 背景颜色设置快捷键启动CM
  • 题解:luogu P5568 [SDOI2008]校门外的区间

    题解 xff1a luogu P5568 SDOI2008 校门外的区间 luogu P5568 SDOI2008 校门外的区间 前置知识 xff1a 珂朵莉树 问题一 xff1a 开闭区间 区间端点均为整数 xff0c 不妨认为 xff0
  • 常用DOS命令之通俗易懂篇

    摘要 xff1a 讲解常用的Dos命令 xff0c 如果需要学习更多的命令可以使用cmd的help工具 文章内容较长 xff0c 可以通过搜索来查找对应的命令 常用DOS命令之通俗易懂篇 Arp 命令Assoc 关联At 计划服务Attri
  • 修改/忘记数据库密码

    文章目录 如何修改数据库密码一 用 SET PASSWORD 命令二 用 mysqladmin三 用 UPDATE 直接编辑 user 表四 在忘记 root 密码的时候 xff0c 可以这样windows下修改linux下修改 五 解决5

随机推荐

  • 远程桌面,身份验证错误:要求的函数不正确等解决办法

    问题解决方法具体解决办法windows 家庭版家庭版最终解决方案 问题 windows 版本 10 0 17134 xff0c 安装最新补丁后无法远程 windows server 2008 2013 2016 服务器 报错信息如下 xff
  • Apache的配置详解 带图

    Apache 的配置详解 带图 1 01 ServerRoot 配置1 02 Mutex default logs1 03 Listen 配置1 04 Dynamic Shared Object DSO Support 动态共享对象支持 1
  • IIS 反向代理到 Apache、Tomcat

    环境工具需求教程 反向代理 IIS 反向代理可以将请求的网址重写到其它网址 xff0c 达到转发的目的 一般用于一台服务器只允许开启80端口 xff0c 而80端口又被IIS使用 xff0c 此时需要在IIS中设置URL重写 xff0c 将
  • 使用hexo+github搭建免费个人博客详细教程

    Windows环境下Git安装 配置SSH key 安装node js npm 安装Hexo及配置 发布博客 前言 使用github pages服务搭建博客的好处有 xff1a 全是静态文件 xff0c 访问速度快 xff1b 免费方便 x
  • Hexo使用细节及各种问题

    解决markdown图片不显示 返回403 forbidden 添加本地图片无法显示 修改文章page模板 同时发布同步到多个仓库站点 Github coding 图片不显示 在使用过程中 xff0c 会发现有的引用图片无法显示的问题 但是
  • 实现Github和Coding仓库等Git服务托管更新

    如何使Github Coding Gitee 码云 同时发布更新 xff0c 多个不同Git服务器之间同时管理部署发布提交 缘由 因为在Github上托管的静态页面访问加载速度较为缓慢 xff0c 故想在Coding上再建一个静态页面的项目
  • 渗透测试常用工具

    包括 Burp Suite Acunetix Web Security with Acunetix Vulnerability Scanner Sqlmap Layer PentestBox Struts 2漏洞检测 御剑工具集锦 Kali
  • Jetbrains IntelliJ IDEA PyCharm 注册激活(2018最新)

    AppCode CLion DataGrip GoLand IntelliJ IDEA PhpStorm PyCharm Rider RubyMine WebStorm下载注册激活 官方下载地址 AppCode CLion DataGrip
  • 有道翻译反反爬虫(python)

    有道翻译反反爬虫 xff08 python xff09 该博客创作于2021 6 30 xff0c 之后有失效可能 作为一个初学者 xff0c 花两天时间破解了有道翻译的反爬虫系统 xff0c 故为之文以记之 参考文章 xff1a 博客1博
  • 建一个别人打不开的文件夹

    怎么创建一个打不开的文件夹 xff0c 文件夹打不开 相信大家都遇到过自己的一些隐私文件不愿意让别人看到的情况吧 xff0c 怎么解决呢 xff1f 隐藏起来 xff1f 换个名字 xff1f 或者加密 xff1f 这些办法都可以办到 xf
  • Sublime入门

    文章目录 Sublime入门介绍下载安装安装Sublime Text3 安装插件插件安装器用Package control安装插件用Package control卸载插件用Package control更新插件 Sublime入门 介绍 S
  • 正则表达式入门教程

    文章目录 什么是正则表达式 1 基本匹配2 元字符2 1 点运算符 96 96 2 2 字符集2 2 1 否定字符集 2 3 重复次数2 3 1 96 96 号2 3 2 96 43 96 号2 3 3 96 96 号 2 4 96 96
  • Centos7上卸载重装MariaDB数据库

    查询所安装的MariaDB组件 xff1a span class token punctuation span root 64 localhost logs span class token punctuation span span cl
  • 【数字图像处理】四种常用的滤波器

    数字图像处理 四种常用滤波器 数字图像处理一 平滑滤波器1 1 基本原理1 2 作用1 3 邻域加权平均实现方式 二 高斯滤波器2 1 基本原理2 2 特点 三 中值滤波器3 1 基本原理3 2 适用场合3 3 实现方式3 4 特点 四 拉
  • 远程X技术初探

    前几天和朋友看到一篇实现远程X的文章 xff0c 就一起尝试了一下 xff0c 基本上成功了 xff0c 具体的过程就写在这篇博客中了 我的机器是64位的Debian Wheezy xff0c 朋友的机器上装的是Arch 实现的思路是先在自
  • Linux安装confluence

    借鉴网址 xff1a Confluence 6 9 0 安装 走看看 一 版本说明 xff1a 1 CentOS 7 0 2 Confluence6 9 xff1a atlassian confluence 6 9 0 x64 bin 链接
  • 面向对象——类和对象

    一 面向对象的概念 面向对象是一种符合人类思维习惯的编程思想 现实生活中存在各种形态不同的事物 xff0c 这些事物之间存在着各种各样的联系 在程序中使用对象来映射现实中的事物 xff0c 使用对象的关系来描述事物之间的联系 xff0c 这
  • 洛谷 P1593 因子和 (升级版!)

    题目描述 已知一个等差数列 an 的首项为 且对于任意两个正整数 i xff0c j 都存在ai 43 aj 也在该数列中 求所有可能的公差 d 的和 答案对 99824353 取模 输入输出格式 输入格式 xff1a 输入的第一行为两个正
  • ubuntu断网、网络设置消失的解决办法

    不知道为啥 xff0c Ubuntu20 04搭配VM16Pro时有很大概率的出现这Bug xff0c 虽然网络上有了很多的帖子记录了解决办法 xff0c 但遇到了还是要记录一下的 环境 1 span class token punctua
  • 特殊三分图匹配

    特殊三分图匹配 64 LOJ 一般三分图的匹配需要运用基于拉格朗日松弛的分支定界法 xff0c 并运用启发式算法得到较优的初始下界 已被证明是NPC问题 出题者在此说明一般三分图的匹配可以解决本题 题目描述 三个点集X xff0c Y xf