【二分图】【最大匹配】【匈牙利算法】洛谷 P2071 座位安排 seat.cpp/c/pas
2014-11-04 17:13
260 查看
∵每个座位可以坐俩人,所以拆点最大匹配。
#include<cstdio> #include<vector> #include<cstring> using namespace std; #define N 2001 vector<int>G[N<<2]; typedef vector<int>::iterator ITER; int mat[N<<2]; bool vis[N<<2]; int n,x,y; bool dfs(int U) { for(ITER it=G[U].begin();it!=G[U].end();it++) if(!vis[*it]) { vis[*it]=1; if(mat[*it]==-1||dfs(mat[*it])) { mat[*it]=U; return 1; } } return 0; } int max_match() { memset(mat,-1,sizeof(mat)); int res=0; for(int i=1;i<=(n<<1);i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) res++; } return res; } int main() { scanf("%d",&n); for(int i=1;i<=(n<<1);i++) { scanf("%d%d",&x,&y); G[i+(n<<1)].push_back(x); G[i+(n<<1)].push_back(x+n); G[i+(n<<1)].push_back(y); G[i+(n<<1)].push_back(y+n); G[x].push_back(i+(n<<1)); G[x+n].push_back(i+(n<<1)); G[y].push_back(i+(n<<1)); G[y+n].push_back(i+(n<<1)); } printf("%d\n",max_match()); for(;;); return 0; }
相关文章推荐
- 二分图最大匹配(匈牙利算法)
- 二分图的最大匹配(匈牙利算法)
- poj3041二分图的最大匹配匈牙利算法
- [Matrix67]二分图最大匹配问题匈牙利算法
- POJ 1274The Perfect Stall (二分图最大匹配问题,匈牙利算法实现)
- 二分图最大匹配问题匈牙利算法
- (资料)二分图(偶图)最大匹配解法之一匈牙利算法
- Pku acm 3041 Asteroids 数据结构题目解题报告(十六)---- 匈牙利算法求二分图的最大匹配
- Pku acm 2771 Guardian of Decency 数据结构题目解题报告(十五)---- 匈牙利算法求二分图的最大匹配
- 二分图最大匹配 - 匈牙利算法
- 二分图最大匹配 匈牙利算法
- 匈牙利算法求二分图的最大匹配
- 匈牙利算法 (二分图的最大匹配)
- Pku acm 1466 Girls and Boys数据结构题目解题报告(十七)---- 匈牙利算法求二分图的最大匹配
- 二分图的最大匹配匈牙利算法和最小支配集
- 用匈牙利算法求二分图的最大匹配
- 二分图最大匹配(匈牙利算法)
- Pku acm 2239 Selecting Courses 数据结构题目解题报告(十二)---- 匈牙利算法求二分图的最大匹配
- 二分图最大匹配 匈牙利算法 (自己写的模板)
- Pku acm 2536 Gopher II 数据结构题目解题报告(十四)---- 匈牙利算法求二分图的最大匹配