BZOJ1191: [HNOI2006]超级英雄Hero
这题标解是改一下匈牙利算法,显然,像我这种从不用匈牙利的人,会找个办法用网络流…
具体做法是这样,二分最后的答案ans,然后对前ans个问题建图跑网络流,看最大流能不能到ans。
/**************************************************************
Problem: 1191
User: zhuohan123
Language: C++
Result: Accepted
Time:64 ms
Memory:3128 kb
****************************************************************/ #include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
int head[],pointsize;
struct edge{int to,next,c,p;};
edge g[];int gnum=;
void addedge(int from,int to,int c)
{
g[++gnum].to=to;g[gnum].c=c;g[gnum].next=head[from];head[from]=gnum;
g[++gnum].to=from;g[gnum].c=;g[gnum].next=head[to];head[to]=gnum;
}
int dfsstart,dfsend,ans;
bool haveans;int dfsans;
int d[],vd[];
void dfs(int po)
{
if(po==dfsend)
{
ans+=dfsans;
haveans=true;
return ;
}
int mind=pointsize-,tempans=dfsans;
for(int i=head[po];i;i=g[i].next)
if(g[i].c)
{
if(d[g[i].to]+==d[po])
{
if(g[i].c<dfsans)dfsans=g[i].c;
dfs(g[i].to);
if(d[dfsstart]>=pointsize)return ;
if(haveans)
{
g[i].c-=dfsans;
g[i^].c+=dfsans;
return ;
}
dfsans=tempans;
}
if(d[g[i].to]<mind)mind=d[g[i].to];
}
vd[d[po]]--;
if(!vd[d[po]])d[dfsstart]=pointsize;
d[po]=mind+;vd[d[po]]++;
}
int isap(int start,int end)
{
ans=;
memset(d,,sizeof(d));
memset(vd,,sizeof(vd));
vd[]=pointsize;
dfsstart=start;
dfsend=end;
while(d[dfsstart]<pointsize)
{
dfsans=;
haveans=false;
dfs(dfsstart);
}
return ans;
}
int n,m;
int mj[][];
bool check(int po)
{
gnum=;memset(head,,sizeof(head));
for(int i=;i<=n;i++)addedge(n+m+,i,);
for(int i=;i<=po;i++)addedge(i+n,n+m+,);
pointsize=n+m+;
for(int i=;i<=po;i++)
{
addedge(mj[i][]+,i+n,);
addedge(mj[i][]+,i+n,);
}
return po==isap(n+m+,n+m+);
}
int imerge(int l,int r)
{
if(l==r)return l;
int mid=(l+r)/+;
if(check(mid))return imerge(mid,r);
else return imerge(l,mid-);
}
int main(int argc ,char *argv[])
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)scanf("%d%d",&mj[i][],&mj[i][]);
printf("%d\n",imerge(,m));
return ;
}
BZOJ1191: [HNOI2006]超级英雄Hero的更多相关文章
- [BZOJ1191][HNOI2006]超级英雄Hero  类似二分图的最大匹配
		
1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4740 Solved: 2162[Submit][ ...
 - BZOJ1191 [HNOI2006]超级英雄Hero  二分图匹配
		
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1191 题目概括 有m个题目,有n个解决方案:对于每一个题目,有两种解决方案可用. 每种解决方案只能 ...
 - 【题解】 bzoj1191: [HNOI2006]超级英雄Hero (二分图)
		
bzoj1191,懒得复制,戳我戳我 Solution: 二分图最大匹配板子题 Attention: 注意题干中的一句话 只有当选手正确回答一道题后,才能进入下一题,否则就被淘汰. Code: //I ...
 - 【二分图】【最大匹配】【匈牙利算法】bzoj1191 [HNOI2006]超级英雄Hero
		
裸的最大匹配. #include<cstdio> #include<vector> #include<cstring> using namespace std; v ...
 - bzoj 1191: [HNOI2006]超级英雄Hero
		
1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec Memory Limit: 162 MB 二分图匹配... Description 现在电视台有一种节目叫做超 ...
 - BZOJ 1191: [HNOI2006]超级英雄Hero  二分匹配
		
1191: [HNOI2006]超级英雄Hero Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或 ...
 - bzoj 1191: [HNOI2006]超级英雄Hero 并查集 || 匈牙利算法
		
1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1804 Solved: 850[Submit][S ...
 - bzoj 1191 [HNOI2006]超级英雄Hero(最大基数匹配)
		
1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2813 Solved: 1331[Submit][ ...
 - BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)
		
云神说他二分图匹配从来都是用网络流水过去的...我要发扬他的精神.. 这道题明显是二分图匹配.网络流的话可以二分答案+最大流.虽然跑得很慢.... -------------------------- ...
 
随机推荐
- desin pattern
			
uml tool http://cruise.site.uottawa.ca/umple/ http://www.umldesigner.org/download/ http://www.eclips ...
 - webpack 学习笔记 01 使用webpack的原因
			
本系列文章实际上就是官网文档的翻译加上自己实践过程中的理解. 伴随着websites演化至web apps的过程,有三个现象是很明显的: 页面中有越来越多的Js. 客户端能做的事情越来越多. 越来越少 ...
 - JavaWeb之Servlet:Cookie 和 Session
			
会话 现实生活中我们会用手机跟对方对话,拿起手机,拨号,然后对面接听,跟着互相通话,最后会话结束. 这个过程也可以用我们的B/S模式来描述: 打开浏览器—>输入地址->发出请求->服 ...
 - ORA-01207: file is more recent than control file -
			
OS: [root@yoon ~]# more /etc/oracle-releaseOracle Linux Server release 5.7 DB: Oracle Database 11g E ...
 - PHP(一)
			
最近一段时间一直忙于新版本的开发工作,所以虽然自己脑中有一些想法,但是苦于没有足够的时间去写下来.好了,昨天终于将大体的功能开发完成,时间上面也不会那么的紧张了.下来我想要好好的梳理一下,自己最近一段 ...
 - 《verilog数字系统设计教程》书评
			
这本书的确是一本很经典的关于verilog语法和一些基本概念的书籍,后面的例子也很好,但是对于初学者来说,我们需要掌握的是语法和一些基本的概念. 刚一开始这本书的中文语法有点不是很通顺,但是越是往后, ...
 - [转]log4net 使用指南
			
声明:本文内容主要译自Nauman Leghari的Using log4net,亦加入了个人的一点心得(节3.1.4). 请在这里下载示例代码 1 简介 1.1 ...
 - linux matplotlib入门
			
python linux matplotlib 安装: sudo apt-get install python-numpy 必须 先安装numpy matplotlib 安装: sudo ap ...
 - 微软职位内部推荐-SDE II
			
微软近期Open的职位: Senior Software Development Engineer Job Title: Senior Development Engineer Division: V ...
 - DES,3DES,AES这三种对称密钥的区别与联系
			
DES:Data Encryption Standard(数据加密标准,又美国国密局,选中的IBM的方案,密钥长度为56,标准提出是要使用64位长的密钥,但是实际中DES算法只用了64位中的56位密钥 ...