SPOJ4206Fast Maximum Matching(hopcroft-karp)
题目大意:裸的二分匹配。
题目分析:数据比较强,用来测模版的。这题用hungry跑着会比较吃力,所以用hopcroft-karp算法。这个算法较hungry高效是因为每次bfs找到一个增广路集,然后用dfs进行多路增广,同时找多条增广路,从而效率大增。其实怎么看hk算法都是个没有边权的dinic啊。
参照着wikipedia 敲了一个hk,效率貌似不高啊。。。
详情请见代码:
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 50001;
const int M = 150001;
const int inf = 0x3f3f3f3f; int head[N];
struct node
{
int to,next;
}g[M];
int m,n,p,num;
int matchx[N],matchy[N],que[N],dis[N];
void build(int s,int e)
{
g[num].to = e;
g[num].next = head[s];
head[s] = num ++;
}
bool bfs()
{
int i,j;
int front,rear;
front = rear = 0;
for(i = 1;i <= n;i ++)
{
if(!matchx[i])
{
dis[i] = 0;
que[rear ++] = i;
}
else
dis[i] = inf;
}
dis[0] = inf;
while(front != rear)
{
int u = que[front ++];
if(front == N)
front = 0;
for(i = head[u];~i;i = g[i].next)
{
int v = g[i].to;
if(dis[matchy[v]] == inf)
{
dis[matchy[v]] = dis[u] + 1;
que[rear ++] = matchy[v];
if(rear == N)
rear = 0;
}
}
}
return dis[0] != inf;
}
bool dfs(int u)
{
int i,v;
for(i = head[u];~i;i = g[i].next)
{
v = g[i].to;
if(dis[matchy[v]] == dis[u] + 1)
if(matchy[v] == 0 || dfs(matchy[v]))
{
matchx[u] = v;
matchy[v] = u;
return true;
}
}
dis[u] = inf;
return false;
} void Hopcroft_Karp()
{
memset(matchx,0,sizeof(matchx));
memset(matchy,0,sizeof(matchy));
int ans = 0;
while(bfs())
{
for(int i = 1;i <= n;i ++)
if(!matchx[i])
if(dfs(i))
ans ++;
}
printf("%d\n",ans);
}
int main()
{
int a,b;
while(scanf("%d",&n) != EOF)
{
memset(head,-1,sizeof(head));
num = 1;
scanf("%d%d",&m,&p);
while(p --)
{
scanf("%d%d",&a,&b);
build(a,b);
}
Hopcroft_Karp();
}
return 0;
}
SPOJ4206Fast Maximum Matching(hopcroft-karp)的更多相关文章
- hdu2389二分图之Hopcroft Karp算法
You're giving a party in the garden of your villa by the sea. The party is a huge success, and every ...
- [Codeforces Round #508 (Div. 2)][Codeforces 1038E. Maximum Matching]
前几天给舍友讲这题的时候感觉挺有意思的,就贴上来吧... 题目链接:1038E - Maximum Matching 题目大意:有\(n\)个棒子,每个条两端有颜色\(c1,c2\)以及他的价值\(v ...
- Codeforces 1038 E - Maximum Matching
E - Maximum Matching 思路: 欧拉图 定理:一个度数为奇数的点的个数小于等于2的联通图存在欧拉回路 对于这道题目的图,点的个数为4,所以最坏的情况下4个点的度数都为奇数,在这种情况 ...
- Codeforces Round #508 (Div. 2) E. Maximum Matching(欧拉路径)
E. Maximum Matching 题目链接:https://codeforces.com/contest/1038/problem/E 题意: 给出n个项链,每条项链左边和右边都有一种颜色(范 ...
- [codeforces 508E]Maximum Matching
题目:Maximum Matching 传送门:http://codeforces.com/contest/1038/problem/E 分析: 一个块拥有{color1,val,color2},两个 ...
- SPOJ 4206 Fast Maximum Matching (二分图最大匹配 Hopcroft-Carp 算法 模板)
题目大意: 有n1头公牛和n2头母牛,给出公母之间的m对配对关系,求最大匹配数.数据范围: 1 <= n1, n2 <= 50000, m <= 150000 算法讨论: 第一反应 ...
- CF1038E Maximum Matching 搜索/区间DP
题目传送门:http://codeforces.com/problemset/problem/1038/E 题意:给出$N$个方块,每个方块有左右两种颜色$a,b$(可以翻转使左右两种颜色交换)和一个 ...
- 最大匹配算法 (Maximum Matching)
之所以研究这个算法,是因为最近在研究NLP中文的分词,所谓分词就是将一个完整的句子,例如“计算语言学课程有意思”,分解成一些词组单元“计算语言学,课程,有,意思”. “最大匹配法” 在中文分词中有所应 ...
- CF#508 1038E Maximum Matching
---题面--- 题解: 感觉还是比较妙的,复杂度看上去很高(其实也很高),但是因为n只有100,所以还是可以过的. 考虑一个很暴力的状态f[i][j][x][y]表示考虑取区间i ~ j的方格,左右 ...
随机推荐
- poj 1348 Computing (四个数的加减乘除四则运算)
http://poj.org/problem?id=1348 Computing Time Limit: 1000MS Memory Limit: 10000K Total Submissions ...
- HAProxy 的负载均衡服务器,Redis 的缓存服务器
问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 亿 ...
- Codeforces Round #237 (Div. 2)
链接 A. Valera and X time limit per test:1 secondmemory limit per test:256 megabytesinput:standard inp ...
- RxJava开发精要7 – Schedulers-解决Android主线程问题
原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...
- 【原创翻译】The Case for the Reduced Instruction Set Computer
RISC机的例子 David A. Patterson 加州大学伯克利分校计算机科学系 David R. Ditzel 贝尔实验室计算科学研究中心 介绍 计算机体系结构最主要的目标之一就是设计比之前产 ...
- 【Pyhton Network】使用poll()或select()实现非阻塞传输
通常情况下,socket上的I/O会阻塞.即除非操作结束,否则程序不会照常进行.而以下集中情况需要在非阻塞模式下进行:1. 网络接口在等待数据时是活动的,可以做出相应:2. 在不使用线程或进程的情况下 ...
- Android开发UI之给ListView设置布局动画效果
1.通过JAVA代码添加,资源文件基本上不修改 XML文件,只添加了一个ListView,就不贴XML文件的代码了. java代码: public class MainActivity extends ...
- trash目录: ~/.local/share/Trash
trash目录:~/.local/share/Trash
- 用 C# 读取二进制文件
当想到所有文件都转换为 XML时,确实是一件好事.但是,这并非事实.仍旧还有大量的文件格式不是XML,甚至也不是ASCII.二进制文件仍然在网络中传播,储存在磁盘上,在应用程序之间传递.相比之下,在处 ...
- cogs_14_搭配飞行员_(二分图匹配+最大流,网络流24题#01)
描述 http://cojs.tk/cogs/problem/problem.php?pid=14 有一些正飞行员和副飞行员,给出每个正飞行员可以和哪些副飞行员一起飞.一架飞机上必须一正一副,求最多多 ...