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 ...
随机推荐
- vue入门须知
1.vue基本结构 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> & ...
- 打开IIS的快捷键
[windows键+R]→在运行界面输入“inetmgr”→点击回车键,即可以出现IIS界面
- JS数组+JS循环题
先看JS循环作业题: 一.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 <script type="text/javascript"> ...
- 什么是Css Hack?ie6,7,8的hack分别是什么?
针对不同的浏览器写不同的CSS code的过程,就是CSS hack. 示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 #test { width:300px; heig ...
- [iOS]从零开始开发一个即时通讯APP
前言 这是我的毕业设计.刚开始确定这个课题的时候是因为以前有稍微研究过一些XMPP协议,在这个基础上做起来应该不难.然后开始选技术的时候还有半年,我想为什么不从更底层做起呢!那就不用XMPP,当时接触 ...
- 20170422早会训话,ps:程序出现两次BUG,领导很生气
针对这种问题: 要讲3点 1.有没有拖团队后腿: 作为一名前端开发人员,对于前端开发的任务,我能够在第一时间完成,保证时间进度,但光做到这一点是不够的,不能只讲究任务,不考虑结果,会不会出现问题造成其 ...
- EL表达式拼接字符串
EL表达式拼接字符串<c:set var="types" value="${','}${resMap['vo'].lineType }${','}" &g ...
- iOS 实现简单的毛玻璃效果
最近在整理导航栏的渐隐渐现效果,整理过程中偶然学会了图片的毛玻璃效果实现,很简单,不多说了,先上图看看效果对比, 这是原图, 这是加了效果后的,创建图片的代码就不上了,下面看下添加效果的代码: // ...
- 每篇半小时1天入门MongoDB——4.MongoDB索引介绍及数据库命令操作
准备工作 继续连接到mongo C:\Users\zouqi>mongo MongoDB shell version: 3.0.7 connecting to: test 查看数据库和集合 &g ...
- Ext viewport的渲染
Ext viewport的渲染 1.在app.js里创建 Ext.application({ name: 'MySecurity', extend: 'MySecurity.Application', ...