CF1139E Maximize Mex(二分图匹配,匈牙利算法)
好题。不过之前做过的[SCOI2010]连续攻击游戏跟这题一个套路,我怎么没想到……
题目大意:在一个学校有 $n$ 个学生和 $m$ 个社团,每个学生有一个非负整数能力值 $p_i$,一开始在社团 $c_i$。接下来有 $d$ 天,第 $i$ 天编号为 $k_i$ 的同学会离开他的社团。每天同学离开后会有一场比赛,要从每个社团里选一个人出来组队(如果社团没人了就不管)。队伍的能力是所有队员能力值集合的 $mex$(没出现过的最小非负整数)。问这个 $mex$ 最大是多少。
所有输入的数不超过 $5000$。
直接删除肯定不好搞,可以把删人的操作倒过来,变成加人。
然后我就一直在想数据结构,结果才发现数据结构学傻了……
我们建立一个二分图,一边是能力值,一边是社团。因为一个社团只能选一次,一个能力值最好也只选一次(一个能力值选多次肯定不会更优)。那么直接跑匈牙利,因为答案不降,所以每次试图往更大的扩展,如果能匹配到就继续,匹配不到那么这个值就是最大的 $mex$。接下来一个同学回来,就一条连边。
时间复杂度 $O(n+m(d+\max(p_i)))$。
注意细节,其中有个细节是with初始为 $-1$。
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline int read(){
char ch=getchar();int x=,f=;
while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return f?-x:x;
}
int n,m,p[maxn],c[maxn],d,k[maxn],with[maxn],el,head[maxn],to[maxn],nxt[maxn],tmp,ans[maxn];
bool vis[maxn],del[maxn];
inline void add(int u,int v){
to[++el]=v;nxt[el]=head[u];head[u]=el;
}
bool dfs(int u){
if(vis[u]) return false;
vis[u]=true;
for(int i=head[u];i;i=nxt[i]){
int v=to[i];
if(with[v]==- || dfs(with[v])){
with[u]=v;with[v]=u;
return true;
}
}
return false;
}
int main(){
MEM(with,-);
n=read();m=read();
FOR(i,,n) p[i]=read();
FOR(i,,n) c[i]=read();
d=read();
FOR(i,,d) del[k[i]=read()]=true;
FOR(i,,n) if(!del[i] && p[i]<m) add(p[i],c[i]+m),add(c[i]+m,p[i]);
ROF(i,d,){
MEM(vis,);
while(dfs(tmp)) tmp++,MEM(vis,);
ans[i]=tmp;
if(p[k[i]]<m) add(p[k[i]],c[k[i]]+m),add(c[k[i]]+m,p[k[i]]);
}
FOR(i,,d) printf("%d\n",ans[i]);
}
CF1139E Maximize Mex(二分图匹配,匈牙利算法)的更多相关文章
- HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))
Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- USACO 4.2 The Perfect Stall(二分图匹配匈牙利算法)
The Perfect StallHal Burch Farmer John completed his new barn just last week, complete with all the ...
- codeforces1139E Maximize Mex 二分图匹配
题目传送门 题意:给出n个人,m个社团,每个人都有一个标号,一个能力值,并且属于一个社团,第i天的凌晨,第$k_i$个人会离开.每天每个社团最多派一个人出来参加活动.派出的人的能力值集合为S,求每天$ ...
- Codevs 1222 信与信封问题 二分图匹配,匈牙利算法
题目: http://codevs.cn/problem/1222/ 1222 信与信封问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 ...
- (转)二分图匹配匈牙利算法与KM算法
匈牙利算法转自于: https://blog.csdn.net/dark_scope/article/details/8880547 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名 ...
- BZOJ1059 [ZJOI2007]矩阵游戏 二分图匹配 匈牙利算法
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1059 题意概括 有一个n*n(n<=200)的01矩阵,问你是否可以通过交换整行和整列使得左 ...
- 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...
- 矩阵游戏|ZJOI2007|BZOJ1059|codevs1433|luoguP1129|二分图匹配|匈牙利算法|Elena
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MB Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩 ...
- BZOJ 1191 [HNOI2006]超级英雄Hero:二分图匹配 匈牙利算法
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 题意: 有m道题,每答对一题才能接着回答下一个问题. 你一道题都不会,但是你有n个“ ...
- [bzoj]1059矩阵游戏<二分图匹配*匈牙利算法>
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1059 初见此题,我觉得这是水题,我认为只要每一行和每一列至少存在一个黑格就可以出现对角线, ...
随机推荐
- vue单页面模板说明文档(1)
Introduction This boilerplate is targeted towards large, serious projects and assumes you are somewh ...
- C#中闭包的陷阱
我们在使用lambda的时候会遇到闭包,在闭包中有一个陷阱是在for循环中产生的,先上代码: class Program { static void Main(string[] args) { Act ...
- Git-用 cherry-pick 挑好看的小樱桃
版权声明:本文为博主原创文章,转载请在文章明显位置标明文章原属哦. https://blog.csdn.net/qq_32452623/article/details/79449534 ti ...
- MySQL 的两个特殊属性 unsigned与 zerofill
1 unsigned unsigned 就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32.看起来unsigned ...
- [转帖]SQL Server 索引中include的魅力(具有包含性列的索引)
SQL Server 索引中include的魅力(具有包含性列的索引) http://www.cnblogs.com/gaizai/archive/2010/01/11/1644358.html 上个 ...
- [转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)
Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626) ADLab2019-03-15共23605人围观 ,发现 4 个不明物体安全报告漏洞 https://www.f ...
- php foreach跳出本次/当前循环与终止循环方法
continue:跳出本次循环 break:终止循环 exit:用来结束程序执行 return: 用来结束一段代码 $arr= array('le','yang','jun','lecode' ...
- C# Note28: Dispatcher类
在项目中也是经常用到: 刚见到它时,你会想:为什么不直接使用System.Windows命名空间下的MessageBox类,何必要这么麻烦?(认真分析看它做了什么,具体原因下面解释) 主要介绍的方法: ...
- hive自定义函数
- SpringMVC配置三大组件
1.组件扫描器 使用组件扫描器省去在spring容器配置每个Controller类的繁琐. 使用<context:component-scan>自动扫描标记@Controller的控制器类 ...