2016级算法期末上机-H.难题·AlvinZH's Fight with DDLs III
1119 AlvinZH's Fight with DDLs III
思路
难题,最小点覆盖。
分析题意,某一个任务,既可以在笔记本A的 \(a\) 模式下完成,也可以在笔记本B的 \(b\) 模式下完成。如果笔记本A处于x模式,那么所有可以在笔记本x模式的任务可以一起完成,B同理。这两句话作为题目核心,该如何转化呢?
对于每个任务对应的(a,b),我们把它映射到平面坐标当中,明显发现,此题和二营长,你他娘的意大利炮呢简直一模一样。其实就是一个最小点覆盖问题,也就是最大二分图匹配问题。
关于最小点覆盖问题为什么等价于最大二分图匹配,第五次讲解课上有证明,期末练习赛E题难题·AlvinZH的青春记忆III大家也遇到过,不知道你真的好好练习了吗?
采用经典的匈牙利算法,构建图时需要注意,由于笔记本AB最初都处于模式0,也就是说若a或b等于0,这个任务可以直接忽略。
分析
二分图匹配算法
1.匈牙利算法:其本质就是,有条件就上,没条件创造条件也要上。DFS与BFS都可,时间复杂度均为 \(O(V⋅E)\) 。实际对于稀疏图BFS更佳。
2.Hopcroft-Karp算法:匈牙利算法的改进版,每次寻找多条增广路径。时间复杂度可以到达 \(O(n^{0.5}*m)\) 。
3.Dinic算法:二分图匹配其实是一个最大流问题,Dinic是一种优化过的求解最大流算法。与朴素的FF算法(\(O(n*m^2)\))不同,其可以同时多路增广。求解二分图时,构建超级源点和超级汇点,匹配边权值为1,求最大流即可。理论最坏复杂度为 \(O(n^2m)\) ,稠密图时比匈牙利DFS快了不少。
参考博客:二分图;
匈牙利算法;
Hopcroft-Karp算法;
Dinic算法
参考代码
/*
Author: 朱辉(35)
Result: AC Submission_id: 514523
Created at: Mon Dec 25 2017 00:33:21 GMT+0800 (CST)
Problem: 1119 Time: 82 Memory: 3024
*/
#include <cstdio>
#include <cstring>
#include <vector>
#define MaxSize 10005
using namespace std;
int n, m, k;
vector<int> G[MaxSize];//邻接矩阵
int match[MaxSize];//记录匹配点
int visit[MaxSize];//记录是否访问
bool dfs(int x)//寻找增广路径
{
for (int i = 0; i < G[x].size(); ++i)
{
int to = G[x][i];
if(!visit[to])
{
visit[to] = 1;
if(!match[to] || dfs(match[to]))
{
match[to] = x;
return true;
}
}
}
return false;
}
int MaxMatch()
{
int ans = 0;
memset(match, 0, sizeof(match));
for (int i = 1; i <= n-1; ++i)
{
memset(visit, 0, sizeof(visit));//清空访问
if(dfs(i)) ans++;//从节点i尝试扩展
}
return ans;
}
int main()
{
while(~scanf("%d %d %d", &n, &m, &k))
{
for (int i = 0; i <= n; ++i)
G[i].clear();
int a, b;
for (int i = 1; i <= k; ++i) {
scanf("%d %d", &a, &b);
if(a*b != 0)
G[a].push_back(b);
}
printf("%d\n", MaxMatch());
}
}
2016级算法期末上机-H.难题·AlvinZH's Fight with DDLs III的更多相关文章
- 2016级算法期末上机-I.难题·ModricWang's Fight with DDLs III
1126 ModricWang's Fight with DDLs III 思路 由于题目中已经说明了时间经过了正无穷,因此初始位置是不重要的,并且每条边.每个点的地位是均等的.因此到达每个点的概率就 ...
- 2016级算法期末上机-F.中等·AlvinZH's Fight with DDLs II
1118 AlvinZH's Fight with DDLs II 思路 中等题,贪心. 理解题意,每次攻击中,可以使某个敌人生命值-1,自己生命值减去∑存活敌人总攻击力. 贪心思想,血量少攻击高的要 ...
- 2016级算法期末上机-D.简单·AlvinZH's Fight with DDLs I
1117 AlvinZH's Fight with DDLs I 思路 简单题,动态规划. 本题与期末练习赛B题很相似,而且更为简单些.简化问题:在数字序列上取数,不能取相邻的数. DP数组定义,dp ...
- 2016级算法期末上机-C.简单·Bamboo's Fight with DDLs III
简单·Bamboo's Fight with DDLs III 分析 一句话:贪心,简单哈夫曼应用,要求的其实是所有结点的值与权值的乘积之和,也就是带权路径长. 可以理解为非叶子节点的权值的和,这里的 ...
- 2016级算法期末上机-B.简单·ModricWang's Fight with DDLs I
1124 ModricWang's Fight with DDLs I 思路 这道题本质上就是一个多项式求值,题目中的n需要手动算一下,单位复根可以根据复数的性质来求,即\(e^{i\pi}+1=0\ ...
- 2016级算法期末上机-A.简单·Bamboo's Fight with DDLs I
简单·Bamboo's Fight with DDLs I 分析 一句话:要装满的完全背包问题. 对比完全背包只有一点要改变:初始化为负无穷 传送门: https://buaacoding.cn/pr ...
- 2016级算法期末上机-G.中等·Bamboo's Fight with DDLs II
中等·Bamboo's Fight with DDLs II 分析 一句话:给定字符串,求最长回文子序列长度,动态规划LCS思想的进阶应用 具体思路如下: 对于任意字符串,如果头尾字符相同,那么字符串 ...
- 2016级算法期末上机-E.中等·ModricWang's Fight with DDLs II
1125 ModricWang's Fight with DDLs II 思路 圆内被划分部分数的计算方式如下: 圆内部的每一个交点都使得总份数增加了一:除此之外,每一根直线段最后抵达圆周时,总份数也 ...
- 2016级算法期末模拟练习赛-F.AlvinZH的青春记忆IV
1086 AlvinZH的青春记忆IV 思路 难题,动态规划. 这是一道很有意思的题,因为它不仅卡了时间,也卡了空间,而且卡的很妙很迷. 光是理解题意已经有点难度,简化题意:两串数字序列,相等的数字定 ...
随机推荐
- win7 python2.7安装PIL库
一.前言 遇到客户给了一个需求,需要拼接多个图片,上网找到一个解决方式,不过是需要安装PIL的,相信安装过这个库的应该都遇到很多问题,接下来说说怎么解决. 我的环境是: 操作系统:win10 64bi ...
- 解题报告-Perfect Squares
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...
- ubuntu 12.04安装jdk 8
转载:http://www.itnose.net/detail/6196130.html Ubuntu12.4安装jdk1.8 1.要安装的jdk,我把它拷在了共享文件夹里面. (用优盘拷也可以 ...
- 04 Python入门学习-流程控制(if else elif while for)
一:流程控制if 语法一: if 条件: code1 code2 code3 ... age = 20 height = 170 weight = 60 sex = 'female' is_beaut ...
- ScreenCapture-HDwik5.0整合教程
示例下载:http://yunpan.cn/Q9qzFmf6sF57z 1.上传ScreenCapture文件夹 2.上传upload.php文件 2.1修改upload.php路径 3.修改Scre ...
- mysql 截取字符串
#select SUBSTRING_INDEX('1,2', ',', 1); SELECT * FROM dis_disease WHERE id = ( SELECT SUBSTRING_INDE ...
- PHP(三)运算符、流程控制和函数初步
- (并查集 带关系)Find them, Catch them -- poj -- 1703
链接: http://poj.org/problem?id=1703 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3676 ...
- CYUSB3014固件部分低版本工程在Eclipse中编译得到img文件时无效的解决方案
最近在做基于我们AC6102开发板的UVC图像视频方案,下载了官方的an75779应用工程,但是倒入到FX3—SDK自带的Eclipse中后,却无法编译生成img文件,经过比对后确认是生成该文件的命令 ...
- openfire搭建spackweb在线即时聊天
1.首先去openFire官网下载openFire以及spackweb,以下地址可以2样东西一次打包下载.http://download.csdn.net/detail/a315157973/8048 ...