xdu_1048:二分匹配模板测试
二分匹配的模板题,这里用网络流模板(见刘汝佳《算法竞赛入门经典·训练指南》P359 Dinic算法)做。
将男女生均看做网络上的节点,题中给出的每个“关系”看做一条起点为u节点,终点为v结点,容量为1的弧(因为每对“关系”只有匹配成功与失败两种情况,用1为容量即可表示)。再取超级源汇s,t,由s向每个男生结点引容量为1的弧,每个女生结点向t引容量为1的弧(每个男生或是女生最多只能匹配成功一次,容量这样设置的话,一个结点与一个异性结点匹配成功后,它与所点的源点或汇点的流量将为1,无空余容量了,也就无法再继续同第三者匹配)。最后跑最大流算法就好了。
#include<bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f;//即int的最大值 struct Edge { int from,to,cap,flow; }; int n,s,t,m,A,B; // A B为本题特有 // s t为超级源汇 , M = ; struct Dinic { vector<int> G[N]; bool vis[N]; int d[N]; int cur[N]; vector<Edge> edges; void init() { ; i<n+; i++) //注意这里的 结点下标 的范围 G[i].clear(); edges.clear(); } void AddEdge(int from,int to,int cap) { edges.push_back((Edge){}); edges.push_back((Edge){to,,}); int w=edges.size(); G[); G[to].push_back(w-); } bool bfs() { memset(vis,,sizeof(vis)); queue<int>Q; d[s] = ; Q.push(s); vis[s]=; while (!Q.empty()) { int x = Q.front(); Q.pop(); ; i<G[x].size(); i++) { Edge e=edges[G[x][i]]; if (!vis[e.to]&&e.cap>e.flow) { vis[e.to]=; d[e.to] = d[x] + ; Q.push(e.to); } } } return vis[t]; } int dfs(int x, int a) { ) return a; ,f; for (int&i = cur[x] ; i<G[x].size(); i++) { Edge& e=edges[G[x][i]]; &&(f=dfs(e.to,min(a,e.cap-e.flow)))>) { e.flow+=f; edges[G[x][i]^].flow-=f; //流量增大意味着净容量减少 flow+=f; //反向边容量表示了正向边的流量 a -= f; )break; } } return flow; } int Maxflow(int s, int t) { ; while (bfs()) { memset(cur,,sizeof(cur)); flow += dfs(s, INF); } // for(int i=1; i<=n; i++) // for(int j=0; j<G[i].size(); j++) // printf("from:%d to:%d cap:%d flow:%d\n",i,edges[G[i][j]].to,edges[G[i][j]].cap,edges[G[i][j]].flow); return flow; } } g; int main() { while(~scanf("%d%d",&A,&B)) { n=A+B; g.init(); s=n,t=n+; int l; scanf("%d",&l); while(l--) { int a,b; scanf("%d%d",&a,&b); g.AddEdge(a,b+A,); } ; i<A; i++) g.AddEdge(s,i,); ; i<B; i++) g.AddEdge(i+A,t,); printf("%d\n",g.Maxflow(s,t)); } }
xdu_1048:二分匹配模板测试的更多相关文章
- dfs,bfs的二分匹配模板(模板题hdu1150)
如果不懂匈牙利算法,请点击:该趣味算法http://blog.csdn.net/dark_scope/article/details/8880547 模板: //DFS版本下的二分匹配算法 http: ...
- Courses HDU - 1083 (二分匹配模板题)
Consider a group of N students and P courses. Each student visits zero, one or more than one courses ...
- 四川第七届 D Vertex Cover(二分图最小点覆盖,二分匹配模板)
Vertex Cover frog has a graph with nn vertices v(1),v(2),…,v(n)v(1),v(2),…,v(n) and mm edges (v(a1), ...
- hdu 1150 Machine Schedule (经典二分匹配)
//A组n人 B组m人 //最多有多少人匹配 每人仅仅有匹配一次 # include<stdio.h> # include<string.h> # include<alg ...
- zoj 2362 Beloved Sons【二分匹配】
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2361 来源:http://acm.hust.edu.cn/vjudg ...
- [kuangbin带你飞]专题十一 网络流
ID Origin Title 34 / 81 Problem A POJ 3436 ACM Computer Factory 92 / 195 Problem B POJ 3 ...
- Codeforces Round #277.5 (Div. 2)B——BerSU Ball
B. BerSU Ball time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Marriage is Stable
Marriage is Stable Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Uncle Tom's Inherited Land*
Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
随机推荐
- CentOS7安装PostgreSQL9.4
这次选择的数据库安装的是run 文件,更容易掌握.这次数据库全是默认安装,如果有需求的可以自行修改一下的. 这是我的第一篇博客,各位观众老爷,如果觉得哪里有什么不好的,可以留言一起探讨,探讨.有什么问 ...
- Java对象的内存布局
对象的内存布局 平时用java编写程序,你了解java对象的内存布局么? 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域: 对象头 实例数据 对齐填充 对象头 对象头包括两部分信息: ...
- springMVC实现REST开发详解(补充Json解析问题以及静态文件404错误解决办法)
一.什么是REST? 符合REST约束风格和原则的应用程序或者设计就是REST 例如: /blog/1 HTTP GET =>查询id=1的blog /blog/1 HTTP DE ...
- Asp.Net生命周期的详解
一.Asp.Net页面生命周期的概念 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 TTP页面处理程 ...
- cordova 插件开发
从事基于cordova开发混合APP也快一年了,一直没有自己"亲自操刀"写一个插件,因为网上插件太丰富了,可耻了. 今天完整的记录一次插件开发. cordova环境6.4.0 第一 ...
- 一周一个小demo — 前端后台的交互实例
这一周呢,本K在大神的指导下,完成了一个利用ajax与php文件上传处理相结合的一个留言板功能的小实例,下面就让本K来带大家瞅瞅如何实现这一种功能. 一.界面概览 首先我们来看一下这个小demo的具体 ...
- 有关SQL模糊查询
执行 数据库查询时,有完整查询和模糊查询之分. 一般模糊语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,%:表示任意0个 ...
- Python 基础 (单、双引号区别) 不断补充
最近开始学习Python ,一些小细节的东西不是很理解,所以就记录一下,方便自己以后查看. 我的Python环境: Mac pro 10.12.3,Python3.5 ,Pycharm 多句题外话:公 ...
- centOS6.4安装python3.5,并且安装pip
前言: 如果你也是用的centos系统,打算装python3.0以上版本,再装python下载工具pip,那么恭喜你,你可能也会像我一样遇到各种各样的问题! 另外非常重要的一点:centos都会自带p ...
- CentOS7安装docker 启动不了解决篇
[root@test ~]# yum update [root@test ~]# yum install docker [root@test ~]# service docker start Redi ...