poj2289(二分多重匹配)
来源:互联网 发布:工程设计图软件 编辑:程序博客网 时间:2024/06/01 10:10
题解:二分上限mid,然后看匹配的这个值上限了没有,如果没有就直接把这个值加进去,如果上限了就查找里面存的数还有没有其他能匹配的,然后用这个上限值mid能不能都匹配成功,即可
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;bool inline read(int &x){ x = 0; char c = getchar(); while(c>'9'||c<'0') c = getchar(); while(c>='0'&&c<='9'){ x = x*10+c-'0'; c = getchar(); } if(c=='\n') return false; return true;}const int mx = 1e3+5;int len[mx],y[mx][mx];bool vis[mx];vector<int>g[mx];int n,m;bool find(int u,int d){ for(int j = 0; j < g[u].size(); j++){ int v = g[u][j]; if(!vis[v]){ vis[v] = 1; if(len[v]<d){ y[v][len[v]++] = u; return true; } for(int i = 0; i < len[v]; i++) if(find(y[v][i],d)){ y[v][i] = u; return true; } } } return false;}bool MaxMatch(int d){ memset(len,0,sizeof(len)); for(int u = 1; u <= n; u++){ memset(vis,0,sizeof(vis)); if(!find(u,d)) return false; } return true;}int main(){ while(read(n),read(m),n&&m){ for(int u = 1; u <= n; u++){ g[u].clear(); int v; while(read(v)) g[u].push_back(v); g[u].push_back(v); } int l = 1,r = n; while(l<r){ int mid = (l+r)>>1; if(MaxMatch(mid)) r = mid; else l = mid+1; } printf("%d\n",r); } return 0;}
阅读全文
0 0
- poj2289(二分多重匹配)
- poj2289多重二分匹配
- 二分图多重匹配--poj2289
- 【POJ2289】【多重匹配】【二分】【模板】
- POJ2289-Jamie's Contact Groups(二分图多重匹配)
- POJ2289 Jamie's Contact Groups(二分图多重匹配)
- poj2289--Jamie's Contact Groups(二分多重匹配)
- POJ2289 Jamie's Contact Groups(二分图多重匹配+二分)
- POJ2289 Jamie's Contact Groups 二分图多重匹配
- poj2289 Jamie's Contact Groups(二部图多重匹配)
- 二分多重匹配(HDU5093)
- POJ2289 Jamie's Contact Groups 二分+最大流匹配
- hdu 1669(二分+多重匹配)
- POJ 2289(多重匹配+二分)
- 二分图多重匹配(HDU 2255)
- POJ -2112(二分多重匹配)
- hihocoder1393(二分图多重匹配)
- poj2112--Optimal Milking(二分多重匹配)
- 面试问题nio拆包粘包问题怎么解决
- [android-wifi](7.1)漫游部分逻辑
- Spring Boot学习一Hello World!
- 2017.8.31
- 网络取证基础一
- poj2289(二分多重匹配)
- sql server中表数据生成批量insert into 插入语句
- python Eclipse IDE环境搭建
- 网易笔试编程题2
- 《那年花开月正圆》
- Linux学习(四)用户和权限管理
- su: Authentication failure
- 《深入理解Java虚拟机》学习笔记--JVM运行时数据区
- CF842E