四分图匹配
题目描述
一天晚上,zzh 在做梦,忽然梦见了她。
见到她,zzh 也不去看她,只顾低头自语……
“噫,OI 这个东西,真是无奇不有。”
“嘿,你又学了什么?”
“嗯,学到了一种算法,”zzh 装作很神秘的样子,“在生活中有着广泛的应
用,这个算法由匈牙利数学家 Edmonds 于 1965 年提出……”
“哦,那是二分图匹配?”
“咦,你不学 OI,你怎么知道?”
她微微一笑。
“哼!你又不学 OI,你说的什么二分图匹配,只是道听途说而已吧?”
“既然你这么说,那就给你出一道题。听好咯!”
定义四分图,为能将其点集分成四部分,各部分内部没有边的特殊无向图。
定义环的长度,为环中的边数。
定义四分图的一个匹配,为在四分图的边集中提取出一个子集,使得集合中
的边连起来之后,能够构成若干(设为 K)个长度为四的环,每个点最多属于一
个环,并且环上的四个顶点恰好依次取自四分图的四个子点集。其中 K 定义为
四分图的匹配数。
定义四分图的最大匹配,为匹配数最大的匹配方案。
定义四分图的两个匹配是不同的,仅当至少有一条边在一个匹配中是匹配边,
在另一个匹配中不是匹配边。
定义四分图的最大匹配方案数 S,为四分图最大匹配集合的元素个数。
现在对于一张的四分图,要求求其最大匹配数,与其最大匹配方案数。
图的总点数、总边数均不超过 100。
zzh 听完,好不容易记住了定义,结果发现并不会做……于是他只好低下头:
“唉,这题太难了……”
“好吧,那我把这题弱化一下,我把图改成一张特殊的四分图。”
记四个点集分别为 A、B、C、D,给出的四分图按如下规则构造:
点编号(均为整数)范围:
A 集:1..N B 集:1..N C 集:1..2N-1 D 集:1..2N-1
连边情况:
对于所有满足 1≤i,j≤N 的数字对,均有边
A[i]------------------B[j]
| |
C[N+i-j]------D[i+j-1] “既然图已经满足特殊性了,那么我也应该拿掉一个限制。”她笑着说,“我
把边数不超过 100 这个条件去掉。点数的范围就不更改了。”
zzh 又开始苦思冥想,他想了好多好多,想了好久好久,但是最终……
“我不会做……”zzh 低下了头,声音压得很低很低。
“服不服?”
“不服!”
“好吧,看你不服,我把问题再弱化一下!我把点数限制设为不超过 7,这
下,你总应该能做出来了吧?”
zzh 又想了好久好久,结果发现仍然是不会做……这时,床头的闹铃划破了
梦的喧嚣……
现在,zzh 只想问问大家,这题弱化版的弱化版,到底怎么做?
输入描述
一行一个数字,N。
输出描述
第一行输出 K 的最大值,第二行输出 S。
输入样例
2
输出样例
2
4
数据范围
测试点编号 N=3 4 5 6 7
sol:打表好题。。。

#include <cstdio>bool ab[40][40],ac[40][40],bd[40][40],cd[40][40];
int e[1200000];
int i,j,n;
long long s;inline void dfs(int x,int bb,int cc,int dd)
{if (x==n+1)s++;else{for (int b=bb;b!=0;b=b-(b&(-b))){int i=e[b&(-b)];if (ab[x][i])for (int c=cc;c!=0;c=c-(c&(-c))){int j=e[c&(-c)];if (ac[x][j])for (int d=dd;d!=0;d=d-(d&(-d))){int k=e[d&(-d)];if ((bd[i][k]) && (cd[j][k]))dfs(x+1,bb^(1<<(i-1)),cc^(1<<(j-1)),dd^(1<<(k-1)));}}}}return;
}int main()
{scanf("%d",&n);for (i=1;i<=n;i++)for (j=1;j<=n;j++)ab[i][j]=ac[i][n+i-j]=bd[j][i+j-1]=cd[n+i-j][i+j-1]=true;for (i=1,j=1;j<=2*n;i=i<<1,j++)e[i]=j;dfs(1,(1<<n)-1,(1<<(2*n-1))-1,(1<<(2*n-1))-1);printf("%d\n%lld\n",n,s);return 0;
}

詹神打表代码

#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{ll s=0; bool f=0; char ch=' ';while(!isdigit(ch)) {f|=(ch=='-'); ch=getchar();}while(isdigit(ch)) {s=(s<<3)+(s<<1)+(ch^48); ch=getchar();}return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{if(x<0) {putchar('-'); x=-x;}if(x<10) {putchar(x+'0'); return;}write(x/10); putchar((x%10)+'0');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
int n;
int main()
{freopen("quadripartite.in","r",stdin);freopen("quadripartite.out","w",stdout);R(n);Wl(n);if(n==3) puts("78");else if(n==4) puts("4196");else if(n==5) puts("456920");else if(n==6) puts("88142144");else puts("27913176688");return 0;
}

View Code

转载于:https://www.cnblogs.com/gaojunonly1/p/11252753.html

7.26T1四分图匹配相关推荐

  1. SQL的四种匹配模式

    SQL提供了四种匹配模式:% _ [ ] [^ ] 1. % %表示模糊匹配0或多个字符,如以下查询语句: select * from user where name like '%三%'; 这个语句 ...

  2. SQL模糊查询【like】的四种匹配模式

      执行数据库查询时,有完整查询 和 模糊查询之分,一般模糊语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 四种匹配模式 一.% 二. _ 三.[ ] 四.[^] 一 ...

  3. SQL 模糊查询条件的四种匹配模式

    执行数据库查询时,有完整查询和模糊查询之分. 一般模糊语句格式如下: SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件; 其中,关于条件,SQL提供了四种匹配模式: 1.%:表示零 ...

  4. Unity3d游戏安装包 极限减少之 四分图、二分图 (NGUI向)

    在这个酒香也怕巷子深,游戏不打广告不买用户不刷榜就会死的时代.每个游戏代理都想让CP提供的安装包越小越好,能99M绝对不要100M.但是游戏开发商们在一遍一遍踢出无用的资源,一点一点得把游戏包扣小,发 ...

  5. QL Server 中四种匹配符的含义

    SQL中我们会见到很多的匹配符,下面解释一下 % 代表零个或者多个任意字符_ 代表一个任意字符[] 指定范围内的任意单个字符[^] 不在指定范围内的任意单个字符带有匹配符的字符串必须使用引号引起来,例 ...

  6. C++版本OpenCv教程(二十四)直方图匹配

    直方图均衡化函数可以自动的改变图像直方图的分布形式,这种方式极大的简化了直方图均衡化过程中需要的操作步骤,但是该函数不能指定均衡化后的直方图分布形式.在某些特定的条件下需要将直方图映射成指定的分布形式 ...

  7. DETR-二分图匹配 匈牙利算法

    文章目录 前言 1. 二分图匹配问题 2.匈牙利算法 3. DETR中的实现 总结 参考 前言 DETR提出了基于Query的端到端目标检测算法,把目标检测看成了一个集合预测问题,大大简化了模型的训练 ...

  8. 正则表达式(四)匹配模式

    1. 匹配模式 所谓匹配模式,指的是正则中一些改变元字符匹配行为的方式,比如匹配时不区分英文字母大小写.常见的匹配模式有 4 种,分别是不区分大小写模式.点号通配模式.多行模式和注释模式. 1.1 不 ...

  9. ubuntu18.04搭建SLAM环境 转 高翔 十四讲匹配环境

    ubuntu18.04搭建SLAM环境_stjuliet的博客-CSDN博客_ubuntu安装slam

最新文章

  1. AngularJs前端环境搭建
  2. golang defer简介 goland 警告提示 possible resource leak,difer is called in a for loop 原因
  3. linux touch命令 新建文件 更新文件时间
  4. Java实现二叉树的构建与遍历
  5. 心电图心电轴怎么计算_浅谈心电图
  6. Windows:利用各种小工具查看自己电脑上的CPUGPU型号、个数、详细参数等不同方法的详细攻略
  7. 如何利用python在yi'ge_【GE查找Python面试题】面试问题:使用 TVM … - 看准网
  8. leetcode 168. Excel表列名称
  9. python math库函数源码_11. math库函数
  10. 大数据学习笔记09:MapReduce概述
  11. iOS-实现验证码倒计时功能(1)
  12. ps手柄震动测试软件,PS3 可实现震动 用PS3手柄连接电脑图文教程 - 电玩巴士
  13. 计算机用户太多怎样删除,删除电脑中多余的用户的4个小技巧
  14. matlab 生成噪声信号
  15. 前端应用 - 汉字笔顺书写演示带拼音及发音
  16. 最小公倍数用c语言,如何用C语言求最小公倍数。。。
  17. 地图 svg中国地图、echarts百度迁徙图
  18. 计算机硬件系统概念,计算机系统概念
  19. android时间控件
  20. 西安职业中等专业学校计算机专业,西安实验职业中等专业学校毕业及就业介绍...

热门文章

  1. ubuntu server 改变系统语言支持中文
  2. XML转JSON的javascript代码
  3. PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)
  4. RequestResponse总结
  5. 潭州课堂25班:Ph201805201 django 项目 第三十三课 后台文章标签查询提交到前台,删除功能实现(课堂笔记)...
  6. Opencv读取图片像素值
  7. mysql设计规范和原则
  8. 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。...
  9. [转]FPGA的GTP信号PCB布线要点
  10. 用Js的eval解析JSON中的注意点