poj 2771 Guardian of Decency(最大独立数)
2015-08-31 11:37
405 查看
题意:人与人之间满足4个条件之一即不能成为一对(也就说这4个条件都不满足才能成为一对),求可能的最多的单身人数。
思路:把男女分为两部分,接下来就是二分图的匹配问题。把能成为一对的之间连边,然后求出最大匹配。题目要求的是最大独立数。
最大独立数=顶点数-最大匹配数
View Code
思路:把男女分为两部分,接下来就是二分图的匹配问题。把能成为一对的之间连边,然后求出最大匹配。题目要求的是最大独立数。
最大独立数=顶点数-最大匹配数
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define MAXN 1024 struct person{ int h; char music[105]; char sport[105]; }male[MAXN],female[MAXN]; int n,m,k,x,y,pre[MAXN]; //二分图中X集和Y集的节点数各为n、m,边数为k;匹配边集为pre,其中节点i所在的匹配边为(pre[i],i) bool v[MAXN],a[MAXN][MAXN]; //设二分图相邻矩阵为a,Y集合中节点的访问标志为v,若Y集合中的节点j已访问,则v[j]=true bool dfs(int i){//判断以X集合中的节点i为起点的增广路径是否存在 int j; for(j=0; j<m; j++){ if(!v[j]&&a[i][j]){//搜索所有与i相邻的未访问点 v[j]=1;//访问节点j if(pre[j]==-1||dfs(pre[j])){ //若j的前驱是未盖点或者存在由j的前驱出发的增广路径,则设定(i,j)为匹配边,返回成功标志 pre[j]=i; return true; } } } return false;//返回失败标志 } int main(){ int t,num,h; char sex[2]; int i,j,ans; scanf("%d",&t); while(t--){ memset(a,0,sizeof(a));//二分图的相邻矩阵初始化 memset(pre,-1,sizeof(pre));//匹配边集初始化为空 n=m=0; scanf("%d",&num); while(num--){ scanf("%d%s",&h,sex); if(sex[0]=='M'){ male .h=h; scanf("%s%s",male .music,male .sport); ++n; } else{ female[m].h=h; scanf("%s%s",female[m].music,female[m].sport); ++m; } } for(i=0;i<n;++i){ for(j=0;j<m;++j){ if(abs(male[i].h-female[j].h)<=40&&strcmp(male[i].music,female[j].music)==0&&strcmp(male[i].sport,female[j].sport)!=0) a[i][j]=1; } } ans=0;//匹配边数初始化为0 for(i=0; i<n; i++){//枚举X集的每个节点 memset(v,0,sizeof(v));//设Y集合中的所有节点的未访问标志 if(dfs(i)) ans++;//若节点i被匹配边覆盖,则匹配边数+1 } printf("%d\n",n+m-ans); } return 0; }
View Code
相关文章推荐
- 写一个脚本,实现判断192.168.3.0/24网络里,当前在线的IP有哪些。
- 解决安装XAMPP后apache一直运行不成功
- 深入理解Java的接口和抽象类
- opencv+cuda内存泄露错误
- Activity Task 详解
- ORACLE 多表关联 UPDATE 语句
- OC中特有的一些语法
- 安卓常用开发命令
- mysql单表更新及多表更新
- python学习-函数定义理解
- The type javax.servlet.ServletContext cannot be resolved.
- JVM的相关知识整理和学习
- 名词释义
- 响应式布局简明示例-兼容IE8及以下浏览器
- Embedding Scripts
- 关于禁止图片拖动的问题
- 用ajax提交数据到后台以便下载,但是不能下载
- txt文件转换成pdf格式的方法
- leetcode 125 Valid Palindrome(难易度:Easy)
- 转身,遇到秋