POJ 1274 The Perfect Stall(二分匹配)- from lanshui_Yang
2013-11-05 21:33
369 查看
题目大意不再敖述,就是赤裸裸的求最大匹配,只是顺手复习下匈牙利算法,呵呵。
代码如下:
代码如下:
#include<iostream> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<cstdio> #include<vector> #include<queue> #define mem(a , b) memset(a , b , sizeof(a)) using namespace std ; const int MAXN = 300 ; vector<int> G[MAXN]; bool vis[MAXN] ; int linkx[MAXN] , linky[MAXN] ; int n , m ; void chu() { mem(linkx , -1) ; mem(linky , -1) ; int i ; for(i = 0 ; i <= n ; i ++) { G[i].clear() ; } } void init() { int i ; for(i = 1 ; i <= n ; i ++) { int t ; scanf("%d" , &t) ; int j ; for(j = 0 ; j < t ; j ++) { int b ; scanf("%d" , &b) ; G[i].push_back(b) ; } } } int dfs(int u) { int i ; for(i = 0 ; i < G[u].size() ; i ++) { int v ; v = G[u][i] ; if(!vis[v]) { vis[v] = true ; if(linkx[v] == -1 || dfs(linkx[v])) { linkx[v] = u ; linky[u] = v ; return 1 ; } } } return 0 ; } void solve() { int ans = 0 ; int i ; for(i = 1 ; i <= n ; i ++) { if(linky[i] == -1) { mem(vis , 0) ; ans += dfs(i) ; } } printf("%d\n" , ans) ; } int main() { while (scanf("%d%d" , &n , &m) != EOF) { chu() ; init() ; solve() ; } return 0 ; }
相关文章推荐
- Handler消息传递机制——Handler、Loop、MessageQueue的工作原理
- 分治 Divide and Conquer 局部最小值 local optimal 棋盘问题
- poj 2031 Building a Space Station(prime )
- uva 11995 - I Can Guess the Data Structure!
- Training—Building an OpenGL ES Environment
- java SWING/GUI测试程序
- ***1133. Fibonacci Sequence(斐波那契数列,二分,数论)
- 做ios工程时,把UI从xib移动到代码中遇到的问题
- HDU 4435 charge-station - from lanshui_Yang
- Error setting expression 'file' with value '[Ljava.lang.String;@1e940b'
- IOS UITableView中行的操纵
- Composite做rowkey抛出InvalidRequestException解决方法
- 收录批量查询神器 bluecattools
- UIViewController中各方法调用顺序及功能详解
- easyui datagrid 列对不齐
- IOS中UIScrollView的contentSize、contentOffset和contentInset属性
- request.getContextPath()和request.getRealPath()的区别
- iOS - UITableViewCell 添加长按手势(别的手势类似):
- UIEdgeInsetsMake的作用
- UITextView自动滚动的解决方案