二分图的考验 题解
时间:2019-11-06
本文章向大家介绍二分图的考验 题解,主要包括二分图的考验 题解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
10%的数据,n ≤ 100, k = 0,w = 0。
直接输出即可。(就是个完全匹配)
10%的数据,n ≤ 10, k≤ 20, 0 ≤ w ≤ 500。
O(n!)枚举。(就是搜索啊~)
10%的数据,n≤ 15,k ≤ 20, 0 ≤ w ≤ 500。
状压,fi,j表示处理了左边前i个点,右边被匹配的点状态是j。
O(n * 2^n)。
10%的数据,n ≤ 100, k = 0, 0 ≤ w ≤ 500。
计算每个的贡献就好了。(可以试着打表找规律)
20%的数据,n≤ 100, k ≤ 15, 0 ≤ w ≤ 500。
容斥,枚举哪些边一定要选,然后计算每条边的贡献。
具体的实现可以看代码~
O(n* 2^k)。
其实这中题主要需要自己想明白,因为容斥千变万华~
#include <bits/stdc++.h> #pragma GCC optimize(2) #define p 1000000007 #define inc(i,a,b) for(register int i=a;i<=b;i++) using namespace std; int n,k; template<class nT> inline void read(nT& x) { char c; while(c=getchar(),!isdigit(c)); x=c^48; while(c=getchar(),isdigit(c)) x=x*10+c-48; } long long a[310][310],sumx[310],sumy[310]; long long sum; int l[310],r[310]; long long ans2,ans1; int bo[310]; long long f[310]; void dfs(int dep,int cnt,int ssum) { if(dep>=k){ long long tmp=sum; inc(i,1,cnt) tmp-=sumx[l[bo[i]]],tmp-=sumy[r[bo[i]]]; inc(i,1,cnt) inc(j,1,cnt) tmp+=a[l[bo[i]]][r[bo[j]]]; tmp=tmp*f[n-cnt-1]%p; tmp=(tmp+ssum*f[n-cnt]%p)%p; if(cnt&1) ans1=((ans1-f[n-cnt])%p+p)%p,ans2=((ans2-tmp)%p+p)%p; else ans1=(ans1+f[n-cnt])%p,ans2=(ans2+tmp)%p; return; } bool pan=0; inc(i,1,cnt) if(l[dep+1]==l[bo[i]]||r[dep+1]==r[bo[i]]) pan=1; dfs(dep+1,cnt,ssum); if(!pan) bo[cnt+1]=dep+1,dfs(dep+1,cnt+1,ssum+a[l[dep+1]][r[dep+1]]); } int main() { read(n); inc(i,1,n) inc(j,1,n) read(a[i][j]),sumx[i]=(sumx[i]+a[i][j])%p,sumy[j]=(sumy[j]+a[i][j])%p,sum=(a[i][j]+sum)%p; read(k); inc(i,1,k) read(l[i]),read(r[i]),l[i]++,r[i]++; f[0]=1; inc(i,1,300) f[i]=f[i-1]*i%p; dfs(0,0,0); cout<<ans1<<" "<<ans2; } /* 5 2 3 4 5 6 5 4 3 2 1 7 6 5 4 3 5 6 7 8 9 3 4 5 6 7 3 1 2 2 2 3 4 */
原文地址:https://www.cnblogs.com/kamimxr/p/11806575.html
- 程序员你为什么这么累【续】:编码习惯-函数编写建议
- 那些年,我们一起碰到过的骗局
- Spring Security (五) 动手实现一个IP_Login
- 史上最全Linux提权后获取敏感信息方法
- Spring Security (四) 核心过滤器源码分析
- Spring Security (三) 核心配置解读
- Spring Cloud配置中心获取不到最新配置信息的问题
- 总是听别人说响应式布局,原来这么简单
- Spring Cloud Zuul重试机制探秘
- Eureka中RetryableClientQuarantineRefreshPercentage参数探秘
- Edgware.RC1中ZuulFallbackProvider的改进
- JPA的多表复杂查询:详细篇
- 尝试使用Memcached遇到的狗血问题
- Enumerable#Zip 实现一下
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- OpenCV还能实现这种效果? | 视频防抖技术
- 迁移到 Go Modules
- 使用docker 搭建redis的哨兵机制
- 使用docker 搭建redis的主从复制
- 使用Python判断文件下是否有空文件夹
- MySQL 设置用户可以远程连接
- MySQL关于character_set 设置为uft8问题
- nohup 退出终端不退出任务
- windows 下Redis开机自启动
- 机器学习基础:决策树的可视化
- 持续部署入门:基于 Kubernetes 实现蓝绿发布
- PHP 实现Redis发布订阅消息及时通讯
- 简单几步,用云开发搞定短信验证码登录
- 重要的进程就让Supervisor 来守护吧!
- 机器学习基础:令你事半功倍的pipeline处理机制