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(二分图匹配)
云神说他二分图匹配从来都是用网络流水过去的...我要发扬他的精神.. 这道题明显是二分图匹配.网络流的话可以二分答案+最大流.虽然跑得很慢.... -------------------------- ...
随机推荐
- 10.python中的序列
本来说完字符串.数字.布尔值之后,应该要继续讲元祖.列表之类的.但是元祖和列表都属于序列,所以有必要先讲讲python的序列是什么. 首先,序列是是Python中最基本的数据结构.序列中的每个元素都分 ...
- PAT乙级真题1001. 害死人不偿命的(3n+1)猜想 (15)(解题)
卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...
- oracle11g 数据文件误删恢复(无备份)
OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ...
- azure 云服务证书下载方式
打开地址自动下载证书,vs中项目-右键-发布-导入证书. https://manage.windowsazure.cn/publishsettings/index 在 Visual Studio 中打 ...
- golang处理错误的艺术
golang中关键API的调用都会在最后返回err(golang多值返回). 调用者可以选择处理, 或者不处理该err, 或原装返回给上一层的调用者. golang中的err是error类型, typ ...
- 在meteor中如何使用ionic组件tabs,及如何添加使用cordova plugin inappbrower
更新框架: meteor update meteor框架的优点不言而喻,它大大减轻了App前后端开发的负担,今年5月又获得B轮2000万融资,代表了市场对它一个免费.开源开发框架的肯定.cordova ...
- CSS3设置字体
@font-face{ font-family: myFirstFont;src: url('Sansation_Light.ttf') ,url('Sansation_Light.eot'); ...
- CoreLocation简单应用
1.获取locationManager let locationManager: CLLocationManager = CLLocationManager() 2.设置locationManager ...
- shell 编程基础
1 创建shell脚本文件 要创建一个shell脚本文件,必须在第一行指定要使用的shell,其格式为: #! /bin/bash 接着加上该shell文件的注释,说明该脚本文件用来干什么,有谁创建, ...
- 条款7:为多态基类声明virtual析构函数
C++明确指出:当派生类对象是由一个基类指针释放的,而基类中的析构函数不是虚函数,那么结果是未定义的.其实我们执行时其结果就是:只调用最上层基类的析构函数,派生类及其中间基类的析构函数得不到调用. # ...