BZOJ1191 [HNOI2006]超级英雄Hero 二分图匹配
2024-09-28 14:28:43
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - BZOJ1191
题目概括
有m个题目,有n个解决方案;对于每一个题目,有两种解决方案可用。
每种解决方案只能用一次,问最多可以通过最前面的几题?
题解
几乎是裸的二分图匹配。
每个题目两条边,分别连向所对应的两种解决方案。
然后跑匈牙利算法。具体可以看这里,往后翻就有匈牙利算法的解说。
可怕的是,我之前以为是最多可以通过几道。
白白wa了很久……
其实是从第一题开始,最多可以连续通过几道。
代码
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=+,M=N;
struct Gragh{
int cnt,x[M],y[M],nxt[M],fst[N];
void set(){
cnt=;
memset(fst,,sizeof fst);
}
void add(int a,int b){
x[++cnt]=a,y[cnt]=b;
nxt[cnt]=fst[a],fst[a]=cnt;
}
}g;
int n,m,cnt,vis[N],match[N];
bool dfs(int x){
for (int i=g.fst[x];i;i=g.nxt[i])
if (!vis[g.y[i]]){
vis[g.y[i]]=;
if (match[g.y[i]]==-||dfs(match[g.y[i]])){
match[g.y[i]]=x;
return ;
}
}
return ;
}
int main(){
scanf("%d%d",&n,&m);
g.set();
memset(match,-,sizeof match);
cnt=;
for (int i=,a,b;i<=m;i++){
scanf("%d%d",&a,&b);
a++,b++;
g.add(i,m+a);
g.add(i,m+b);
memset(vis,,sizeof vis);
if (dfs(i))
cnt++;
else
break;
}
printf("%d",cnt);
return ;
}
最新文章
- sas编程-日期相差计算函数 intnx
- python 实现树结构的打印
- xpath爬取网页评论,网址的的调用方法,数据库特殊字符的替换
- Atititi tesseract使用总结
- Java并发编程知识总结
- WCF之绑定
- Tcl语言笔记之二
- Python笔记之基本的语法
- SQL Server定时自动抓取耗时SQL并归档数据脚本分享
- HDU4876ZCC loves cards(多校题)
- id,is的用法,小数据池的概念及编码知识进阶
- OpenCV实现图像上添加汉字 转
- hadoop入门级总结二:Map/Reduce
- css:id选择器的权重>;class选择器的权重=属性选择器的权重>;元素选择器
- Grovvy带参数的闭包
- redis maxheap 51200000
- 软件工程M1/M2总结及阅读作业总结
- swift语言版本选择 - 解决XCode报错:The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported valu
- Linux使用一个定时器实现设置任意数量定时器功能【转】
- [BZOJ4027][HEOI2015]兔子与樱花 树形dp
热门文章
- 【转】Robot Framework作者建议如何选择自动化测试框架
- PMM安装-第一篇
- 移动前端框架,require.js压缩
- 一:对程序员来说CPU是什么?
- python 设计及调试的一些小技巧
- 【转】mysql8.0 在window环境下的部署与配置
- 一文看懂汽车电子ECU bootloader工作原理及开发要点
- unicode-range特定字符使用font-face自定义字体
- 目标检测--Spatial pyramid pooling in deep convolutional networks for visual recognition(PAMI, 2015)
- vue构建项目全过程