BZOJ5335 : [TJOI2018]智力竞赛
二分答案,转化成求最少的路径,覆盖住所有权值$\leq mid$的点。
建立二分图,若$i$的后继为$j$,则连边$i\rightarrow j$,求出最大匹配,则点数减去最大匹配数即为最少需要的路径数量。
特别地如果某个点$i$的权值$>mid$,则它可以不经过,连边$i\rightarrow i$表示忽略该点。
因为这是稠密图,用bitset优化匈牙利算法即可。
时间复杂度$O(\frac{m^3\log m}{32})$。
#include<cstdio>
#include<algorithm>
using namespace std;
typedef unsigned int U;
const int N=505,M=N/32+1;
int n,m,tot,k,i,j,x,l,r,mid,ans,v[N],q[N],f[N],cnt;U a[N][M],g[N][M],b[M];
inline void set1(U v[],int x){v[x>>5]|=1U<<(x&31);}
inline void flip(U v[],int x){v[x>>5]^=1U<<(x&31);}
bool find(int x){
for(int i=0;i<=tot;i++)while(1){
U o=g[x][i]&b[i];
if(!o)break;
int y=i<<5|__builtin_ctz(o);
flip(b,y);
if(!f[y]||find(f[y]))return f[y]=x,1;
}
return 0;
}
bool check(int lim){
for(i=1;i<=m;i++)for(j=0;j<=tot;j++)g[i][j]=a[i][j];
for(i=1;i<=m;i++)if(v[i]>lim)set1(g[i],i);
for(i=1;i<=m;i++)f[i]=0;
cnt=0;
for(i=1;i<=m;i++){
for(j=1;j<=m;j++)set1(b,j);
if(find(i))cnt++;
}
return m-cnt<=n;
}
int main(){
scanf("%d%d",&n,&m);n++;tot=m>>5;
for(i=1;i<=m;i++){
scanf("%d%d",&v[i],&k);
q[i]=v[i];
while(k--)scanf("%d",&x),set1(a[i],x);
}
sort(q+1,q+m+1);
l=1,r=m;
while(l<=r){
mid=(l+r)>>1;
if(check(q[mid]))l=(ans=mid)+1;else r=mid-1;
}
if(ans==m)puts("AK");else printf("%d",q[ans+1]);
}
BZOJ5335 : [TJOI2018]智力竞赛的更多相关文章
- 【BZOJ5335】[TJOI2018]智力竞赛(二分图匹配)
[BZOJ5335][TJOI2018]智力竞赛(二分图匹配) 题面 BZOJ 洛谷 题解 假装图不是一个DAG想了半天,.发现并不会做. 于是假装图是一个DAG. 那么显然就是二分答案,然后求一个最 ...
- BZOJ5335:[TJOI2018]智力竞赛——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5335 小豆报名参加智力竞赛,他带上了n个好朋友作为亲友团一块来参加比赛. 比赛规则如下: 一共有m ...
- 洛谷P4589 [TJOI2018]智力竞赛(二分答案 二分图匹配)
题意 题目链接 给出一个带权有向图,选出n + 1n+1条链,问能否全部点覆盖,如果不能,问不能覆盖的点权最小值最大是多少 Sol TJOI怎么净出板子题 二分答案之后直接二分图匹配check一下. ...
- [TJOI2018]智力竞赛【网络流】
题解: 这垃圾题意 问题二分之后等价于 可重复路径判断能否覆盖一张图 1.用floyd连边(来保证可重复) 然后拆点跑最大流 然后答案=n-最大流 但这样子做本来复杂度就比较高,边数增加了n倍 2.我 ...
- [TJOI2018]智力竞赛
题目 发现我们需要最大化最小值,基本是二分了 那么我们二分出来一个值我们将小于等于这个值的都删去,现在的问题变成了如何用\(n+1\)条路径覆盖这张图 这不最小路径覆盖吗 于是我就忘了最小路径覆盖怎么 ...
- 洛谷P4589 [TJOI2018]智力竞赛 【floyd + 二分 + KM】
题目链接 洛谷P4589 题意可能不清,就是给出一个带权有向图,选出\(n + 1\)条链,问能否全部点覆盖,如果不能,问不能覆盖的点权最小值最大是多少 题解 如果要问全部覆盖,就是经典的可重点的DA ...
- 【洛谷P4589】[TJOI2018]智力竞赛(二分+最小链覆盖)
洛谷 题意: 给出一个\(DAG\),现在要选出\(n+1\)条可相交的链来覆盖,最终使得未被覆盖的点集中,权值最小的点的权值最大. 思路: 显然最终的答案具有单调性,故直接二分答案来判断: 直接将小 ...
- loj#2574. 「TJOI2018」智力竞赛 (路径覆盖)
目录 题目链接 题解 代码 题目链接 loj#2574. 「TJOI2018」智力竞赛 题解 就是求可重路径覆盖之后最大化剩余点的最小权值 二分答案后就是一个可重复路径覆盖 处理出可达点做二分图匹配就 ...
- [Offer收割]编程练习赛3 - 题目3 : 智力竞赛
智力竞赛 Problem's Link ---------------------------------------------------------------------------- Mea ...
随机推荐
- 简单文本悬浮div提示效果
<html> <head> <script src="jquery-1.9.1.min.js" type="text/javascript& ...
- java项目部署常用linux命令
1.显示当前所有java进程pid的命令:jps2.查找文件或文件夹目录查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查 ...
- GDAL create kml
新增kml 点 public void WriteKmlPiont() { string driverName = "KML"; //MapInfo File OSGeo.GDAL ...
- Android logcat lines missing原因分析
当出现类似如下错误日志时: 2019-04-14 17:51:14.506 10189-10189/com.ss.android.ex.parent D/GGK: no WonderfulVideo ...
- springmvc 开发流程图
- window下 多开redis
1.先复制整个redis 一份 2.在配置文件redis.windows.conf .redis.windows-server.conf中 改端口 3.cmd命令 redis-server redi ...
- 从基本理解到深入探究 Linux kernel 通知链(notifier chain)【转】
转自:https://blog.csdn.net/u014134180/article/details/86563754 版权声明:本文为博主原创文章,未经博主允许不得转载.——Wu_Being ht ...
- Java编程思想(后)
Java编程思想(后) 持有对象 如果一个程序只包含固定数量的且其生命期都是已知的对象,那么这是一个非常简单的程序. Java中的库基本类型: List, Set, Queue和Map --- 称为集 ...
- 解析查询 queryString 请求参数的函数
quety string 请求参数 本质上可以理解为一种序列化的格式,与 json 类似,它是一种字典类型的容器,里面可以保存键值对(key-value pair).只不过 querystring 这 ...
- FF D8 FF FE 00 24 47 00转图片
String[] img = "FF D8 FF FE 00 24 47 00 9D 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 0 ...