二分匹配 HDU1068 Girls and Boys
2015-08-14 20:23
288 查看
求最大独立集。
第一道二分匹配题,跟着别人的模板糊里糊涂地A了,然而却还不理解这个模板。
后来回来看,稍微有了新的认识。
首先这一题,是在一个集合内找最大独立集,而这个模板适用的是,左右两边集合确定,关系确定的情况。
所以,在这题我们就把左右两边都当成0-n-1来处理,而这样做就必须保留双向边,即题目给你一个关系 1->2,你存边的时候必须把2->1也存下来,因为你还不确定到底哪个属于左边(实际上这道题目给了你1->2的关系,必然会给你2->1的关系)。——这一点个人认为挺重要的。
我们这么做,也就会导致最后得到的最大匹配数乘了2,因为这是对称的。(理解万岁,纠结了好久)
第一道二分匹配题,跟着别人的模板糊里糊涂地A了,然而却还不理解这个模板。
后来回来看,稍微有了新的认识。
首先这一题,是在一个集合内找最大独立集,而这个模板适用的是,左右两边集合确定,关系确定的情况。
所以,在这题我们就把左右两边都当成0-n-1来处理,而这样做就必须保留双向边,即题目给你一个关系 1->2,你存边的时候必须把2->1也存下来,因为你还不确定到底哪个属于左边(实际上这道题目给了你1->2的关系,必然会给你2->1的关系)。——这一点个人认为挺重要的。
我们这么做,也就会导致最后得到的最大匹配数乘了2,因为这是对称的。(理解万岁,纠结了好久)
#include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> #include <limits.h> #include <math.h> #include <algorithm> #include <stack> #include <queue> #include <vector> #include <map> #include <set> #include <string> #include <sstream> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; const double pi=4.0*atan(1.0); const int MAXN=1005; //顶点编号从0开始的 int uN;//u的数目,使用前面必须赋 int linker[MAXN]; int used[MAXN]; vector<int> g[MAXN]; int dfs(int u) { for(int i=0;i<g[u].size();i++) { int v=g[u][i]; if(!used[v]) { used[v]=1; if(linker[v]==-1 || dfs(linker[v])) { linker[v]=u; return 1; } } } return 0; } int hungary() { int ans=0; memset(linker,-1,sizeof(linker)); for(int u=0;u<uN;u++) { memset(used,0,sizeof(used)); if(dfs(u)) ans++; } return ans; } int main() { int n; int i,j,k; int x,y; while(scanf("%d",&n)!=EOF) { for(i=0;i<=n;i++) g[i].clear(); for(i=0;i<n;i++) { scanf("%d: (%d)",&x,&y); for(j=1;j<=y;j++) { scanf("%d",&k); g[i].push_back(k); } } uN=n; int ans=0; ans=hungary(); printf("%d\n",n-ans/2); } return 0; }
相关文章推荐
- Erlang库 -- 有意思的库汇总
- 华为训练题:初级——合并表记录(字典,简单题)
- 循环,迭代,遍历的区别
- Google后Hadoop时代的新“三驾马车”
- hdu 1250 高精度+斐波那契
- 减少科研文章写作错误的一点小技巧
- MAVEN for mac 安装
- 【转载】UIScrollView
- PAT 1073. Scientific Notation (20)
- ThreadLocal用法和实现原理
- hdu 5381 The sum of gcd
- 谷歌技术"三宝"之谷歌文件系统
- [SDOI2015][BZOJ3991] 寻宝游戏|set|dfs序|虚树|树上倍增LCA
- centos7下安装adagios
- Codeforces 6C
- Linux 网络配置
- 文件权限管理及ACL设置
- OC - Menory(High)
- hdu 1069 dp
- 黑马程序员——java复习总结——GUI和网络编程